2D卷積是一種圖像處理和計(jì)算機(jī)視覺(jué)中常用的操作,用于在圖像上應(yīng)用濾波器或卷積核,從而對(duì)圖像進(jìn)行特征提取、平滑處理或邊緣檢測(cè)等操作。
在2D卷積中,圖像和卷積核都是二維的矩陣或數(shù)組。卷積操作將卷積核在圖像上滑動(dòng),對(duì)每個(gè)局部區(qū)域進(jìn)行元素級(jí)別的乘法和累加操作,得到輸出圖像的對(duì)應(yīng)位置的像素值。
OpenCV 提供了多種濾波方式,來(lái)實(shí)現(xiàn)平滑圖像的效果,例如均值濾波、方框?yàn)V波、高斯濾波、中值濾波等。大多數(shù)濾波方式所使用的卷積核都具有一定的靈活性,能夠方便地設(shè)置卷積核的大小和數(shù)值。但是,我們有時(shí)希望使用特定的卷積核實(shí)現(xiàn)卷積操作,例如使用如下卷積核進(jìn)行卷積操作。
前面介紹過(guò)的濾波函數(shù)都無(wú)法將卷積核確定為上述形式,這時(shí)要使用 OpenCV 的自定義卷積函數(shù)。
在 OpenCV 中,允許用戶(hù)自定義卷積核實(shí)現(xiàn)卷積操作,使用自定義卷積核實(shí)現(xiàn)卷積操作的函數(shù)是 cv2.filter2D()
,其語(yǔ)法格式為:
dst = cv2.filter2D( src, ddepth, kernel, anchor, delta, borderType )
式中:
- dst 是返回值,表示進(jìn)行方框?yàn)V波后得到的處理結(jié)果。
-
src 是需要處理的圖像,即原始圖像。它能夠有任意數(shù)量的通道,并能對(duì)各個(gè)通道獨(dú)立
處理。圖像深度應(yīng)該是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一種。 - ddepth 是處理結(jié)果圖像的圖像深度,一般使用-1 表示與原始圖像使用相同的圖像深度。
- kernel 是卷積核,是一個(gè)單通道的數(shù)組。如果想在處理彩色圖像時(shí),讓每個(gè)通道使用不同的核,則必須將彩色圖像分解后使用不同的核完成操作。
- anchor 是錨點(diǎn),其默認(rèn)值是(-1, -1),表示當(dāng)前計(jì)算均值的點(diǎn)位于核的中心點(diǎn)位置。該值使用默認(rèn)值即可,在特殊情況下可以指定不同的點(diǎn)作為錨點(diǎn)。
- delta 是修正值,它是可選項(xiàng)。如果該值存在,會(huì)在基礎(chǔ)濾波的結(jié)果上加上該值作為最終的濾波處理結(jié)果。
- borderType 是邊界樣式,該值決定了以何種情況處理邊界,通常使用默認(rèn)值即可。
在通常情況下,使用濾波函數(shù) cv2.filter2D()時(shí),對(duì)于參數(shù)錨點(diǎn) anchor、修正值 delta、邊界樣式 borderType,直接采用其默認(rèn)值即可。因此,函數(shù) cv2.filter2D()的常用形式為:
dst = cv2.filter2D( src, ddepth, kernel )
示例:
自定義一個(gè)卷積核,通過(guò)函數(shù) cv2.filter2D()應(yīng)用該卷積核對(duì)圖像進(jìn)行濾波操作,并顯示濾波結(jié)果。
設(shè)計(jì)一個(gè) 9×9 大小的卷積核,讓卷積核內(nèi)所有權(quán)重值相等,如下所示:
借助 numpy 庫(kù)中的 ones()函數(shù)即可創(chuàng)建該卷積核,具體的語(yǔ)句為:
kernel = np.ones((9,9),np.float32)/81
綜上所述,程序設(shè)計(jì)代碼如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-624038.html
import cv2
import numpy as np
o=cv2.imread("lena.png")
kernel = np.ones((9,9),np.float32)/81
r = cv2.filter2D(o,-1,kernel)
cv2.imshow("original",o)
cv2.imshow("Gaussian",r)
cv2.waitKey()
cv2.destroyAllWindows()
運(yùn)行結(jié)果
當(dāng)然,本例中使用的卷積核比較簡(jiǎn)單,該濾波操作與直接使用均值濾波語(yǔ)句“r=cv2.blur(o,(5,5))”的效果是一樣的。在實(shí)際應(yīng)用中,可以定義更復(fù)雜的卷積核實(shí)現(xiàn)自定義濾波操作。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-624038.html
到了這里,關(guān)于opencv-34 圖像平滑處理-2D 卷積 cv2.filter2D()的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!