OpenCV利用高斯模糊可以實現毛玻璃的特效

2021-09-06 15:57:36 字數 2501 閱讀 8143

1.理論知識

先看偉大的高斯分布(gaussian distribution)的概率密度函式(probability density function):

gaussian distribution(normal distribution)其圖形特點為中間高,兩頭低,是鐘形曲線(bell-shaped curve)。在高斯分布中,以數學期望μ表示鐘型的中心位置(也即曲線的位置),而標準差(standard deviation)σ表徵曲線的離散程度。

隨機變數x服從數學期望為μ、方差為σ^2的正態分佈,記為:

x = n ( μ, σ^2 )

當數學期望為0,方差為1時,該分布為標準正態分佈(standard normal distribution)。

高斯分布曲線的特徵:

關於μ對稱;總面積為1;在μ加減σ處為拐點(先內翻後外翻。

此外,我們通過公式可以看出,σ越大,x位置的概率值就越小,說明曲線越平緩(矮小);而如果σ小,x的概率就大,說明曲線是瘦高的,概率分布比較集中。

如上圖所示,紅,藍,橘黃色曲線的數學期望在0點,但藍色的方差為0.2,所以其最為陡峭,而橘紅色曲線的方差為5.0,證明其分布很廣,由於曲線的概率總和為1,所以若其分布廣,則高度必然會較低。綠色曲線由於其數學期望為-2,所以,在其他三條曲線的左側。

對應於numpy中:

numpy.random.normal(loc=0.0, scale=1.0, size=none)
引數的意義為:

loc:float

此概率分布的均值(對應著整個分布的中心centre)

scale:float

此概率分布的標準差(對應於分布的寬度,scale越大越矮胖,scale越小,越瘦高)

size:int or tuple of ints

輸出的shape,預設為none,只輸出乙個值

我們更經常會用到的np.random.randn(size)所謂標準正態分佈(μ=0,σ=1),對應於np.random.normal(loc=0, scale=1, size)。

2.利用高斯模糊可以實現毛玻璃的特效

import cv2 as cv

import numpy as np

def clamp(pv):

if pv > 255:

return 255

if pv < 0:

return 0

else:

return pv

def gaussian_noise(image):

h, w, c = image.shape

for row in range(h):

for col in range(w):

#獲取3通道的隨機數

s = np.random.normal(0, 20, 3)

#獲取3通道的原始值

b = image[row, col, 0] # blue

g = image[row, col, 1] # green

r = image[row, col, 2] # red

#通過隨機數,更新3通道的原始值

image[row, col, 0] = clamp(b + s[0])

image[row, col, 1] = clamp(g + s[1])

image[row, col, 2] = clamp(r + s[2])

cv.imshow("noise image", image)

print("--------- hello python ---------")

src = cv.imread("d:/vcprojects/images/example.png")

cv.namedwindow("input image", cv.window_autosize)

cv.imshow("input image", src)

t1 = cv.gettickcount()

#gaussian_noise(src)

t2 = cv.gettickcount()

time = (t2 - t1)/cv.gettickfrequency()

print("time consume : %s"%(time*1000))

dst = cv.gaussianblur(src, (0, 0), 15)

cv.imshow("gaussian blur", dst)

cv.waitkey(0)

cv.destroyallwindows()

3.效果展示

Opencv之高斯模糊

一 高斯模糊 二 實驗 這裡 高斯模糊本質上是低通濾波器,輸出影象的每個畫素點是原影象上對應畫素點與周圍畫素點的加權和,原理並不複雜。做久了卷積神經網路看這個分外親切,就是用高斯分布權值矩陣與原始影象矩陣做卷積運算而已。摘錄wiki上兩段原文 數學上講,對影象做高斯模糊等同於將影象與高斯函式卷積。由...

opencv學習筆記(8)高斯雜訊與高斯模糊

常見的雜訊 高斯 泊松和椒鹽雜訊 大學本科階段,大二左右一般都會教的,對這個不了解可以出門右轉補一下課,可能會方便後續的理解。1.對於np.random.normal有疑問的可以參考這篇部落格 侵刪 python中的np.random.normal 2.np.clip x,a min,a max 相...

從頭學習opencv(7) 高斯模糊

部落格寫的比較簡單,不過我發現了一下很不錯的博主,看他的可以理解很多學習的時候不明白的地方。這篇文章很多參考了他的部落格p 9097231.html 高斯雜訊 def gaussian noise image h,w,c image.shape for row in range h for col ...