高斯模糊(Gaussian Blur)也叫高斯平滑,通常用它来减少图像噪声以及降低细节层次;
图像的高斯模糊i过程就是图像与正态分布做卷积;
高斯模糊对图像来说就是一个低通滤波器;
from cv2 import cv2 as cv
import numpy as np
def clamp(pv): # 确保这个随机数在0-255之间
if pv > 255:
return 255
elif pv < 0:
return 0
else:
return pv
def gaussian_noise(image):
h,w,c = image.shape # 未使用的变量c 但具体化了
for row in range(h):
for col in range(w):
s = np.random.normal(0,20,3)
b = image[row,col,0] # blue
g = image[row,col,1] # green
r = image[row,col,2] # red
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('gaussian_noise',image)
if __name__ == "__main__":
filepath = "C:\\pictures\\10.jpg"
img = cv.imread(filepath) # blue green red
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",img)
# 测时间
t1 = cv.getTickCount()
gaussian_noise(img)
t2 = cv.getTickCount()
time = (t2-t1)/cv.getTickFrequency()
print('time consume : %s ms'%(time*1000))
dst = cv.GaussianBlur(img,(5,5),0) # 了解这个函数的用法
'''
GaussianBlur()函数用高斯滤波(GaussianFilter)对图像进行平滑处理,
该函数将源图像与指定的高斯内核进行卷积,同时也支持in-place滤波
dst = GaussianBlur(src,ksize,sigmaX[, dst[, sigmaY[, borderType]]])
关于参数ksize:
ksize.width和ksize.height可以不同
取值有2种情况:
可以是正的奇数
也可以是0,此时它们的值会自动由sigma进行计算
关于参数sigmaX和sigmaY:
sigmaY=0时,其值自动由sigmaX确定(sigmaY=sigmaX);
sigmaY=sigmaX=0时,它们的值将由ksize.width和ksize.height自动确定;
'''
cv.imshow("gaussian demo",dst)
cv.waitKey(0)
cv.destroyAllWindows()
左边的图是加了高斯噪声,中间的是对原图进行高斯模糊的结果,右边是原图。