Python-OpenCV 图像处理(七):高斯模糊

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

猜你喜欢

转载自blog.csdn.net/zx_good_night/article/details/88639520