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)文章
在Django框架中運(yùn)行Python應(yīng)用全攻略
這篇文章主要介紹了在Django框架中運(yùn)行Python應(yīng)用全攻略,在這之前必須搭建好簡單的視圖和模版,接下來便是本文中所述的核心內(nèi)容應(yīng)用配置,需要的朋友可以參考下2015-07-07
Python簡單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例
這篇文章主要介紹了Python簡單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽功能,結(jié)合實(shí)例形式分析了Python基于socket構(gòu)建客戶端與服務(wù)器端通信相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
python?subprocess執(zhí)行外部命令常用方法詳細(xì)舉例
這篇文章主要給大家介紹了關(guān)于python?subprocess執(zhí)行外部命令常用方法的相關(guān)資料,Python的subprocess模塊提供了一種在Python中調(diào)用外部命令的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
python分析實(shí)現(xiàn)微信釘釘?shù)溶浖嚅_分身
我發(fā)現(xiàn)壇友分享的很多都是通過cmd?去start?多個(gè)微信,雖然能實(shí)現(xiàn)多開,但不夠靈活,比如我上午登錄了一個(gè)微信,下午在登錄就不太好用了,當(dāng)然也可能是我start的姿勢不對(duì)。于是我就搜了下單實(shí)例原理,自己動(dòng)手實(shí)現(xiàn)了個(gè)隨用隨開的2022-02-02
python爬蟲selenium和phantomJs使用方法解析
這篇文章主要介紹了python爬蟲selenium和phantomJs使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Python編程利用科赫曲線實(shí)現(xiàn)三維飄雪效果示例過程
這篇文章主要介紹了Python編程實(shí)現(xiàn)三維飄雪效果示例過程,通過本示例你可以自己做出一個(gè)浪漫的雪花飄落效果,有需要的朋友可以借鑒參考下2021-10-10
關(guān)于Numpy生成數(shù)總結(jié)(隨機(jī)整數(shù)randint,固定步長arange,分布)
這篇文章主要介紹了關(guān)于Numpy生成數(shù)總結(jié)(隨機(jī)整數(shù)randint,固定步長arange,分布),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12

