OpenCV中有數(shù)百種在不同色彩空間之間轉(zhuǎn)換的方法肩碟。如今强窖,在計(jì)算機(jī)視覺中有三種常用的色彩空間:灰度、BGR以及HSV(Hue, Saturation,Value)削祈。
- 灰度色彩空間是通過去除彩色信息來將其轉(zhuǎn)換成灰階翅溺,灰度色彩空間對中間處理特別有效,比如人臉檢測岩瘦。
- BGR未巫,即藍(lán)-綠-紅色彩空間,每一個像素點(diǎn)都由一個三元數(shù)組來表示启昧,分別代表藍(lán)叙凡、綠、紅三種顏色密末。
- HSV握爷,H(Hue)是色調(diào), S(Saturation)是飽和度严里, V(Value)表示黑暗的程度(或光譜另一端的明亮程度)新啼。
傅里葉變換
在OpenCV中,對圖像和視頻的處理大多數(shù)都會涉及到傅里葉變換的概念刹碾。具體而言燥撞,就是我們所觀察到所有的波形都可以由一系列簡單且頻率不同的正弦曲線疊加得到。也就是說所看到的波形都是由不同的正弦曲線疊加得到的迷帜。在圖像處理上就可以理解為原始圖像由許多頻率組成物舒,我們就能夠分離這些頻率來理解圖像和提取感興趣的數(shù)據(jù)。
讓·巴普蒂斯·約瑟夫·傅里葉
讓·巴普蒂斯·約瑟夫·傅里葉(Baron Jean Baptiste Joseph Fourier戏锹,1768-1830)冠胯,男爵,法國數(shù)學(xué)家锦针、物理學(xué)家荠察,1768年3月21日生于歐塞爾,1830年5月16日卒于巴黎奈搜。1817年當(dāng)選為科學(xué)院院士悉盆,1822年任該院終身秘書,后又任法蘭西學(xué)院終身秘書和理工科大學(xué)校務(wù)委員會主席馋吗。
主要貢獻(xiàn)是在研究《熱的傳播》和《熱的分析理論》時創(chuàng)立了一套數(shù)學(xué)理論焕盟,對19世紀(jì)的數(shù)學(xué)和物理學(xué)的發(fā)展都產(chǎn)生了深遠(yuǎn)影響。
圖像的幅度譜(magintude spectrum)京髓。幅度譜圖像呈現(xiàn)了原始圖像在變化方面的一種表示:把一幅圖像中最明亮的像素放到圖像中央,然后逐漸變暗商架,在邊緣上的像素最暗堰怨。這樣可以發(fā)現(xiàn)圖像中有多少亮的像素和暗的像素,以及它們的百分比蛇摸。
高通濾波器(HPF, High Pass Filter)
高通濾波器(HPF)是檢測圖像的某個區(qū)域备图,然后根據(jù)像素與周圍像素的亮度差值來提升該像素的亮度的濾波器。也就是說赶袄,如果一個像素比它周圍的像素更突出揽涮,就會提升它的亮度。
低通濾波器(Low Pass Filter)
高通濾波器是根據(jù)像素與鄰近像素的亮度差值來提升該像素的亮度饿肺。低通濾波器則是在像素與周圍像素的亮度差值小于一個特定值時蒋困,平滑該像素的亮度。主要用于去噪和模糊化敬辣,如高斯模糊是最常用的模糊濾波器雪标,是一個削弱高頻信號強(qiáng)度的低通濾波器。
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()
邊緣檢測
邊緣在人類視覺和計(jì)算機(jī)視覺中起著重要作用溉跃。OpenCV提供了許多邊緣檢測濾波函數(shù)村刨,如Laplacian(), Sobel()以及Scharr()。這些濾濾函數(shù)會將非邊緣區(qū)域轉(zhuǎn)為黑色撰茎,將邊緣區(qū)域轉(zhuǎn)為白色或其他飽和的顏色嵌牺。但它們又很容易將噪聲錯誤地識別為邊緣。解決方案就是在找到邊緣之前對圖像進(jìn)行模糊處理龄糊。OpenCV提供的模糊濾波函數(shù)逆粹,如blur(),medianBlur()以及GaussianBlur()。
Canny邊緣檢測
Canny邊緣檢測步驟:使用高斯濾波器對圖像進(jìn)行去噪绎签、計(jì)算梯度枯饿、在邊緣上使用非最大抑制(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()