python 基于opencv實(shí)現(xiàn)高斯平滑
假設(shè)一個(gè)列數(shù)為W,行數(shù)為H的高斯卷計(jì)算子gaussKernel,其中W,H均為奇數(shù),描點(diǎn)位置在((H-1)/2 ,(W-1)/2),構(gòu)建高斯卷積核的步驟如下
1.計(jì)算高斯矩陣

2.計(jì)算高斯矩陣的和

3.高斯矩陣除以其本身的和,也就是歸一化

下面利用Python來實(shí)現(xiàn)構(gòu)建高斯卷積算子
def getGaussKernel(sigma, H, W): r, c = np.mgrid[0:H:1, 0:W:1] r -= (H - 1) / 2 c -= (W - 1) / 2 gaussMatrix = np.exp(-0.5 * (np.power(r) + np.power(c)) / math.pow(sigma, 2)) # 計(jì)算高斯矩陣的和 sunGM = np.sum(gaussMatrix) # 歸一化 gaussKernel = gaussMatrix / sunGM return gaussKernel
高斯卷積核可以分離成一維水平方向上的高斯核和一維垂直方向上的高斯核,在OpenCV中給出了構(gòu)建一維垂直方向上的高斯卷積核的函數(shù):
Mat getGaussianKernel(int ksize, double sigma, in ktype = CV/_64F)
| 參數(shù) | 釋意 |
|---|---|
| ksize | 一維垂直方向上的高斯核行數(shù),正奇數(shù) |
| sigma | 標(biāo)準(zhǔn)差 |
| ktype | 返回值的數(shù)據(jù)類型為CV_32F或CV_64F,默認(rèn)是CV_64F |
下面通過Python代碼來具體的實(shí)現(xiàn)圖像的高斯平滑,我們首先會(huì)對(duì)圖像水平方向進(jìn)行卷積,然后再對(duì)垂直方向進(jìn)行卷積,其中sigma代表高斯卷積核的標(biāo)準(zhǔn)差
def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):
#水平方向上的高斯卷積核
gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)
#進(jìn)行轉(zhuǎn)置
gaussKenrnel_x = np.transpose(gaussKenrnel_x)
#圖像矩陣與水平高斯核卷積
gaussBlur_x = signal.convolve2d(image,gaussKenrnel_x,mode='same',boundary=_boundary,fillvalue=_fillvalue)
#構(gòu)建垂直方向上的卷積核
gaussKenrnel_y = cv2.getGaussianKernel(sigma,H,cv2.CV_64F)
#圖像與垂直方向上的高斯核卷積核
gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussKenrnel_y,mode='same',boundary= _boundary,fillvalue=_fillvalue)
return gaussBlur_xy
if __name__ == "__main__":
image = cv2.imread("../images/timg.jpg", cv2.IMREAD_GRAYSCALE)
cv2.imshow("image",image)
#高斯平滑
blurImage = gaussBlur(image, 5, 400, 400, 'symm')
#對(duì)bIurImage進(jìn)行灰度級(jí)顯示
blurImage = np.round(blurImage)
blurImage = blurImage.astype(np.uint8)
cv2.imshow("GaussBlur", blurImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
運(yùn)行截圖:

以上就是python 基于opencv實(shí)現(xiàn)高斯平滑的詳細(xì)內(nèi)容,更多關(guān)于python 高斯平滑的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用wxPython和PyMuPDF實(shí)現(xiàn)合并PDF文檔
處理大量的PDF文檔可能會(huì)變得復(fù)雜和耗時(shí),但是,使用Python編程和一些強(qiáng)大的庫(kù),可以使這個(gè)任務(wù)變得簡(jiǎn)單而高效,下面我們就來看看Python如何使用wxPython和PyMuPDF合并PDF文檔并自動(dòng)復(fù)制到剪貼板吧2023-11-11
Python深度學(xué)習(xí)albumentations數(shù)據(jù)增強(qiáng)庫(kù)
下面開始albumenations的正式介紹,在這里我強(qiáng)烈建議英語基礎(chǔ)還好的讀者去官方網(wǎng)站跟著教程一步步學(xué)習(xí),而這里的內(nèi)容主要是我自己的一個(gè)總結(jié)以及方便英語能力較弱的讀者學(xué)習(xí)2021-09-09
python解析網(wǎng)頁上的json數(shù)據(jù)并保存到EXCEL
這篇文章主要為大家詳細(xì)介紹了如何使用python解析網(wǎng)頁上的json數(shù)據(jù)并保存到EXCEL,文中的示例代碼講解詳細(xì),感興趣的可以了解下2024-11-11
Python編程使用Selenium模擬淘寶登錄實(shí)現(xiàn)過程
這篇文章主要介紹了Python編程使用Selenium模擬淘寶登錄的實(shí)現(xiàn)過程示例及解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-10-10
Django網(wǎng)絡(luò)框架之創(chuàng)建虛擬開發(fā)環(huán)境操作示例
這篇文章主要介紹了Django網(wǎng)絡(luò)框架之創(chuàng)建虛擬開發(fā)環(huán)境操作,簡(jiǎn)單描述了虛擬開發(fā)環(huán)境的概念、功能,并分析了使用venv與virtualenv安裝虛擬環(huán)境相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
基于K.image_data_format() == ''channels_first'' 的理解
這篇文章主要介紹了基于K.image_data_format() == 'channels_first' 的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python隨機(jī)生成一個(gè)6位的驗(yàn)證碼代碼分享
這篇文章主要介紹了Python隨機(jī)生成一個(gè)6位的驗(yàn)證碼代碼分享,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-03-03

