OpenCV的高斯模糊

本文使用python实现

本文的文字说明全在代码的注解里面,不要担心代码看不懂

高斯函数和图像

代码

import cv2 as cv
import numpy as np


def clamp(pv):
    if pv > 255:
        return 255
    elif pv < 0:
        return 0
    else:
        return pv


def gaussian_noise(image):  # 高斯噪声
    h, w, c = image.shape   # image.shape[0], 图片垂直尺寸;image.shape[1], 图片水平尺寸;image.shape[2], 图片通道数
    for row in range(h):
        for col in range(w):
            s = np.random.normal(0, 20, 3)  # 产生一个正态分布
            '''
            numpy.random.normal(loc=0,scale=1.0,size=shape)
            参数loc(float):正态分布的均值,对应着这个分布的中心。loc=0说明这一个以Y轴为对称轴的正态分布
            参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦
            参数size(int 或者整数元组):输出的shape,默认为None,这里设置为3,表示输出3个值
            '''
            b = image[row, col, 0]  # blue;row高度,col宽度,0表示通道0,蓝色
            g = image[row, col, 1]  # green;1表示通道1,绿色
            r = image[row, col, 2]  # red
            image[row, col, 0] = clamp(b + s[0])    # 在通道0上加上一个高斯噪声
            image[row, col, 1] = clamp(g + s[1])    # 在通道1上加上一个高斯噪声
            image[row, col, 2] = clamp(r + s[2])    # 在通道2上加上一个高斯噪声
    cv.imshow("gaussian_noise image", image)


src = cv.imread("C:/Users/admin/Desktop/1.jpg")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)

t1 = cv.getTickCount()
gaussian_noise(src)     # 让图片产生高斯噪声
time = (cv.getTickCount()-t1)/cv.getTickFrequency() # 获取前后时间差
print("time:{}".format(time))
dst = cv.GaussianBlur(src, (5, 5), 0)  # opencv的高斯模糊API
'''
def GaussianBlur(src: Any, ksize: Any, sigmaX: Any, dst: Any = None, sigmaY: Any = None, borderType: Any = None)
src:    输入图片,可以使是任意通道数,该函数对通道是独立处理的
ksize:  高斯内核大小。ksize.width和ksize.height允许不相同但他们必须是正奇数。或者等于0,由参数sigma决定。 
sigmaX: 高斯内核在X方向的标准偏差。
sigmaY: 高斯内核在Y方向的标准偏差。如果sigmaY为0,他将和sigmaX的值相同,如果他们都为0,那么他们由ksize.width和ksize.height计算得出。 
borderType:用于判断图像边界的模式。
'''
cv.imshow("Gaussian Blur", dst)
cv.waitKey(0)
cv.destroyAllWindows()

结果

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑟寒凌风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值