溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中利用opencv實現(xiàn)一個高斯平滑效果

發(fā)布時間:2020-12-19 13:45:26 來源:億速云 閱讀:355 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)怎么在python中利用opencv實現(xiàn)一個高斯平滑效果,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

假設一個列數(shù)為W,行數(shù)為H的高斯卷計算子gaussKernel,其中W,H均為奇數(shù),描點位置在((H-1)/2 ,(W-1)/2),構(gòu)建高斯卷積核的步驟如下

1.計算高斯矩陣

怎么在python中利用opencv實現(xiàn)一個高斯平滑效果

2.計算高斯矩陣的和

怎么在python中利用opencv實現(xiàn)一個高斯平滑效果

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

怎么在python中利用opencv實現(xiàn)一個高斯平滑效果

下面利用Python來實現(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))
  # 計算高斯矩陣的和
  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標準差
ktype返回值的數(shù)據(jù)類型為CV_32F或CV_64F,默認是CV_64F

下面通過Python代碼來具體的實現(xiàn)圖像的高斯平滑,我們首先會對圖像水平方向進行卷積,然后再對垂直方向進行卷積,其中sigma代表高斯卷積核的標準差

def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):
  #水平方向上的高斯卷積核
  gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)
  #進行轉(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')
  #對bIurImage進行灰度級顯示
  blurImage = np.round(blurImage)
  blurImage = blurImage.astype(np.uint8)
  cv2.imshow("GaussBlur", blurImage)
  cv2.waitKey(0)
  cv2.destroyAllWindows()

上述就是小編為大家分享的怎么在python中利用opencv實現(xiàn)一個高斯平滑效果了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI