Opencv-Python學習筆記二——cv2.GaussianBlur,cv2.Canny,

OpenCV中有數百種在不同色彩空間之間轉換的方法。如今,在計算機視覺中有三種常用的色彩空間:灰度、BGR以及HSV(Hue, Saturation,Value)。

  • 灰度色彩空間是通過去除彩色信息來將其轉換成灰階,灰度色彩空間對中間處理特別有效,比如人臉檢測。
  • BGR,即藍-綠-紅色彩空間,每一個像素點都由一個三元數組來表示,分別代表藍、綠、紅三種顏色。
  • HSV,H(Hue)是色調, S(Saturation)是飽和度, V(Value)表示黑暗的程度(或光譜另一端的明亮程度)。

傅里葉變換

在OpenCV中,對圖像和視頻的處理大多數都會涉及到傅里葉變換的概念。具體而言,就是我們所觀察到所有的波形都可以由一系列簡單且頻率不同的正弦曲線疊加得到。也就是說所看到的波形都是由不同的正弦曲線疊加得到的。在圖像處理上就可以理解為原始圖像由許多頻率組成,我們就能夠分離這些頻率來理解圖像和提取感興趣的數據。
讓·巴普蒂斯·約瑟夫·傅里葉

讓·巴普蒂斯·約瑟夫·傅里葉(Baron Jean Baptiste Joseph Fourier,1768-1830),男爵,法國數學家、物理學家,1768年3月21日生于歐塞爾,1830年5月16日卒于巴黎。1817年當選為科學院院士,1822年任該院終身秘書,后又任法蘭西學院終身秘書和理工科大學校務委員會主席。
主要貢獻是在研究《熱的傳播》和《熱的分析理論》時創立了一套數學理論,對19世紀的數學和物理學的發展都產生了深遠影響。

Baron Jean Baptiste Joseph Fourier,1768-1830

圖像的幅度譜(magintude spectrum)。幅度譜圖像呈現了原始圖像在變化方面的一種表示:把一幅圖像中最明亮的像素放到圖像中央,然后逐漸變暗,在邊緣上的像素最暗。這樣可以發現圖像中有多少亮的像素和暗的像素,以及它們的百分比。

高通濾波器(HPF, High Pass Filter)

高通濾波器(HPF)是檢測圖像的某個區域,然后根據像素與周圍像素的亮度差值來提升該像素的亮度的濾波器。也就是說,如果一個像素比它周圍的像素更突出,就會提升它的亮度。

低通濾波器(Low Pass Filter)

高通濾波器是根據像素與鄰近像素的亮度差值來提升該像素的亮度。低通濾波器則是在像素與周圍像素的亮度差值小于一個特定值時,平滑該像素的亮度。主要用于去噪和模糊化,如高斯模糊是最常用的模糊濾波器,是一個削弱高頻信號強度的低通濾波器。

import numpy as np
import pandas as pd
import cv2
from scipy import ndimage

#濾波器矩陣
kernel_3x3 = np.array([[-1, -1, -1],
                   [-1,  8, -1],
                   [-1, -1, -1]])

kernel_5x5 = np.array([[-1, -1, -1, -1, -1],
                       [-1,  1,  2,  1, -1],
                       [-1,  2,  4,  2, -1],
                       [-1,  1,  2,  1, -1],
                       [-1, -1, -1, -1, -1]])

img = cv2.imread("img800.jpg", 0)

k3 = ndimage.convolve(img, kernel_3x3)
k5 = ndimage.convolve(img, kernel_5x5)

#高斯模糊濾波
blurred = cv2.GaussianBlur(img, (17,17), 0)
g_hpf = img - blurred

# cv2.imshow('blurred', blurred)
# cv2.imshow("g_hpf", g_hpf)

cv2.imshow("img", img)
cv2.imshow("3x3", k3)
cv2.imshow("5x5", k5)
cv2.imshow("g_hpf", g_hpf)
cv2.waitKey()
cv2.destroyAllWindows()
hpf-lpf

邊緣檢測

邊緣在人類視覺和計算機視覺中起著重要作用。OpenCV提供了許多邊緣檢測濾波函數,如Laplacian(), Sobel()以及Scharr()。這些濾濾函數會將非邊緣區域轉為黑色,將邊緣區域轉為白色或其他飽和的顏色。但它們又很容易將噪聲錯誤地識別為邊緣。解決方案就是在找到邊緣之前對圖像進行模糊處理。OpenCV提供的模糊濾波函數,如blur(),medianBlur()以及GaussianBlur()。

Canny邊緣檢測

Canny邊緣檢測步驟:使用高斯濾波器對圖像進行去噪、計算梯度、在邊緣上使用非最大抑制(NMS)、在檢測到的邊緣上使用雙(double)閾值去除假陽性,最后分析所有的邊緣及其之間的連接,以保留真正的邊緣并消除不明顯的邊緣。

import numpy as np
import pandas as pd
import cv2

img = cv2.imread("img800.jpg", 0)
cv2.imwrite("canny.jpg", cv2.Canny(img, 200, 300))
cv2.imshow("canny", cv2.imread("canny.jpg"))
cv2.waitKey()
cv2.destroyAllWindows()
canny
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 不同圖像灰度不同,邊界處一般會有明顯的邊緣,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同,邊緣...
    大川無敵閱讀 13,968評論 0 29
  • 鑒于中文語境下,學習 OpenCV 的資料其實稀少,不是主要講解已經過時de 1.x 版內容《學習 OpenCV...
    YimianDai閱讀 7,016評論 2 34
  • 參考資料: 圖像卷積與濾波的一些知識點 圖像處理基本概念——卷積,濾波,平滑 1.卷積的基本概念 首先,我們有一個...
    keloli閱讀 10,149評論 0 26
  • 1.銳化:銳化和邊緣檢測很相似,首先找到邊緣,然后把邊緣加載到原來的圖像上,這樣就強化了圖像的邊緣,使得圖像看起來...
    lemonCode閱讀 995評論 0 2
  • 雨打浮塵潔凈身, 風搖枝柯翡翠衣。 看似文弱難淡定, 卻是瘦影暗飄逸。 沙沙葉聲似求醫, 治治社會不平事。
    王卓族閱讀 236評論 0 1