在OpenCV裡實現高斯平滑5

2021-09-27 01:54:28 字數 739 閱讀 9873

基於可分離的高斯矩陣的卷積,並且計算量還少,那麼opencv也提供了相應的函式getgaussiankernel來計算高斯平滑,這個函式主要用來計算一維垂直方向的高斯卷積核,它的定義如下:

retval=cv.getgaussiankernel(ksize, sigma[, ktype])

其中引數ksize是表示一維垂直方向上的高斯核的行數,要求是正奇數;sigma是表示標準差;ktype是返回矩陣的資料型別。它採用下面的公式來計算:

接著下來採用這個函式來進行平滑的例子:

#python 3.7.4,opencv4.1

#蔡軍生

#import cv2

import numpy as np

import matplotlib.pyplot as plt

from scipy import signal

#高斯平滑計算

def gaussblur(image, ksize, sigma):

#計算高斯卷積運算元

gk = cv2.getgaussiankernel(ksize,sigma)

gk = np.transpose(gk) #x軸平滑

gauss = signal.convolve2d(image, gk, mode=

在OpenCV裡實現高斯平滑1

在前面複習了卷積的運算,以及使用python裡的函式進行計算卷積,理解到卷積的過程,其實在影象裡就是其中一點畫素值可以與它周圍的畫素值進行加權求和,這就意味著輸出的畫素值是作為平均計算,因此該點的畫素值由這點和這點周圍的畫素來決定了。理論上怎麼樣推導,怎麼樣計算,可以先放下來,首要的問題是先來感覺一...

在OpenCV裡實現高斯平滑4

上面通過 構造了高斯運算元,並且使用二維的卷積運算來平滑影象,也達到了目標,不過還有乙個問題,就是當你處理比較大的,或者比較大的高斯矩陣時,就會發現計算的時間很長。這時候我們就要考慮有沒有高效快速的演算法了,再回過頭來審視一下二維高斯函式 可以看到最後的等式,再考慮指數的運算法則 根據 1 指數運算...

在OpenCV裡實現高斯平滑6

前面可以看到使用分離的高斯卷積核來計算平滑更快,不過前面使用的卷積函式是採用scipy裡的,現在我們來採用opencv裡函式sepfilter2d來計算,它的定義如下 dst cv.sepfilter2d src,ddepth,kernelx,kernely dst anchor delta bor...