opencv+python -- 图像模糊处理(二)---高斯模糊

一些美颜软件、美颜相机上的磨皮和毛玻璃特效基本上都是用的高斯模糊,并且大部分图像处理软件中都有高斯模糊的操作,除此之外,高斯模糊还具有减少图像层次和深度的功能

GaussianBlur():定义:GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
给图片创建毛玻璃特效
第二个参数:高斯核的宽和高(建议是奇数)
第三个参数:x和y轴的标准差

opencv+python -- 图像模糊处理(二)---高斯模糊_第1张图片
Gaussian.png

代码

import cv2 as cv
import numpy


def clamp(pv):
    """防止颜色值超出颜色取值范围(0-255)"""
    if pv > 255:
        return 255
    if pv < 0:
        return 0
    return pv


def gaussian_noise(image):
    """高斯噪声"""
    height, width, channel = image.shape
    for row in range(height):
        for col in range(width):
            for c in range(channel):
                s = numpy.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("noise image", image)


src = cv.imread("./data/lena.jpg", cv.IMREAD_COLOR)
cv.namedWindow("lena", cv.WINDOW_AUTOSIZE)
cv.imshow("lena", src)
# 给图片创建毛玻璃特效
# 第二个参数:高斯核的宽和高(建议是奇数)
# 第三个参数:x和y轴的标准差
dst = cv.GaussianBlur(src, (5, 5), 0)
cv.imshow("GaussianBlur", dst)

# start = cv.getTickCount()
# gaussian_noise(src)
# end = cv.getTickCount()
# time = (end - start) / cv.getTickFrequency()
# print("耗时 = ", time * 1000, "ms")
cv.waitKey(0)
cv.destroyAllWindows()

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,只输出一个值

opencv+python -- 图像模糊处理(二)---高斯模糊_第2张图片
gaussian_blur.png

你可能感兴趣的:(opencv+python -- 图像模糊处理(二)---高斯模糊)