import cv2
import numpy as np
__author__ = "zxsuperstar"
__email__ = "[email protected]"
"""
高斯模糊/噪声
轮廓还在,保留图像的主要特征
高斯模糊比均值模糊去噪效果好
"""
def clamp(pv):
if pv > 255:
return 255
if pv < 0:
return 0
else:
return pv
def gaussion_noise(image):
h,w,c = image.shape
for row in range(h):
for col in range(w):
s = np.random.normal(0,20,3)
b = image[row,col,0]
g = image[row, col, 1]
r = image[row, col, 2]
image[row, col, 0] = clamp(b + s[0])
image[row, col, 1] = clamp(b + s[1])
image[row, col, 2] = clamp(b + s[2])
cv2.imshow("noise image",image)
if __name__ == "__main__":
src = cv2.imread("t.jpg") #blue green red
cv2.namedWindow("image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("image",src)
gaussion_noise(src)
gaussian = cv2.GaussianBlur(src,(5,5),0) #高斯模糊
cv2.imshow("gaussian",gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯模糊GaussianBlur函数原型:GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst
src参数表示待处理的输入图像。
ksize参数表示高斯滤波器模板大小。 ksize.width和ksize.height可以不同,但它们都必须是正数和奇数。或者,它们可以是零,即(0, 0),然后从σ计算出来。
sigmaX参数表示 X方向上的高斯内核标准差。
sigmaY参数表示 Y方向上的高斯内核标准差。 如果sigmaY为零,则设置为等于sigmaX,如果两个sigma均为零,则分别从ksize.width和ksize.height计算得到。
补:若ksize不为(0, 0),则按照ksize计算,后面的sigmaX没有意义。若ksize为(0, 0),则根据后面的sigmaX计算ksize