从头学习opencv(7)--高斯模糊

高斯噪声

博客写的比较简单,不过我发现了一下很不错的博主,https://www.cnblogs.com/FHC1994/看他的可以理解很多学习的时候不明白的地方。这篇文章很多参考了他的博客https://www.cnblogs.com/FHC1994/p/9097231.html

#高斯噪声
def gaussian_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]#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)

高斯模糊

1.高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

2.高斯分布的一维和二维原理如下:

补:高斯分布的标准差σ。标准差代表着数据的离散程度,如果σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;反之,σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。高斯模糊具体原理见博文:https://blog.csdn.net/u012992171/article/details/51023768

#高斯模糊
#如果前面设置了值,后面的就不起作用
#dst=cv.GaussianBlur(src,(0,0),15)
dst=cv.GaussianBlur(src,(5,5),0)
#修改之后,输出图片没有那么模糊,说明高斯模糊对高斯噪声有抑制作用

GaussianBlur函数

高斯模糊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

np.random.normal函数

numpy包里的random模块用于生成随机数,random模块里的normal函数表示的是生成高斯随机数。

normal函数默认原型:normal(loc=0.0, scale=1.0, size=None)。

loc参数表示高斯分布的中心点。

scale参数表示高斯分布的标准差σ。

size参数表示产生随机数的个数。size取值可以为(m,n,k),表示绘制mnk个样本。

完整代码

import cv2 as cv
import numpy as np

#防止pv值超出255溢出
def clamp(pv):
    if pv>255:
        return 255
    if pv<0:
        return 0
    else:
        return pv


#高斯噪声
def gaussian_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]#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)


src = cv.imread("C:/Users/Administrator/Desktop/demo.png")
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
t1=cv.getTickCount()
gaussian_noise(src)
t2=cv.getTickCount()
time=(t2-t1)/cv.getTickFrequency()
print("time consume:%s"%(time*1000))
#高斯模糊
#如果前面设置了值,后面的就不起作用
#dst=cv.GaussianBlur(src,(0,0),15)
dst=cv.GaussianBlur(src,(5,5),0)
#修改之后,输出图片没有那么模糊,说明高斯模糊对高斯噪声有抑制作用
cv.imshow("gaussian blur",dst)
cv.waitKey(0)
cv.destroyAllWindows()
print("Hi,python!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值