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

高斯模糊(Gaussian Blur)也叫高斯平滑,通常用它来减少图像噪声以及降低细节层次;
图像的高斯模糊i过程就是图像与正态分布做卷积;
高斯模糊对图像来说就是一个低通滤波器;

from cv2 import cv2 as cv
import numpy as np 

def clamp(pv):  # 确保这个随机数在0-255之间
    if pv > 255:
        return 255
    elif pv < 0:
        return 0
    else:
        return pv

def gaussian_noise(image):
    h,w,c = image.shape      # 未使用的变量c 但具体化了
    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)


if __name__ == "__main__":
	filepath = "C:\\pictures\\10.jpg"
	img = cv.imread(filepath)       # blue green red
	cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
	cv.imshow("input image",img)
	# 测时间
	t1 = cv.getTickCount()
	gaussian_noise(img)
	t2 = cv.getTickCount()
	time = (t2-t1)/cv.getTickFrequency()
	print('time consume : %s ms'%(time*1000))
	dst = cv.GaussianBlur(img,(5,5),0)   # 了解这个函数的用法
	'''
	    GaussianBlur()函数用高斯滤波(GaussianFilter)对图像进行平滑处理,
	    该函数将源图像与指定的高斯内核进行卷积,同时也支持in-place滤波
	    dst = GaussianBlur(src,ksize,sigmaX[, dst[, sigmaY[, borderType]]])
	    关于参数ksize:
	    ksize.width和ksize.height可以不同
	    取值有2种情况: 
	    可以是正的奇数
	    也可以是0,此时它们的值会自动由sigma进行计算
	    关于参数sigmaX和sigmaY:
	    sigmaY=0时,其值自动由sigmaX确定(sigmaY=sigmaX);
	    sigmaY=sigmaX=0时,它们的值将由ksize.width和ksize.height自动确定;
	'''
	cv.imshow("gaussian demo",dst)
	
	cv.waitKey(0)
	cv.destroyAllWindows()

左边的图是加了高斯噪声,中间的是对原图进行高斯模糊的结果,右边是原图。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiao黄

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

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

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

打赏作者

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

抵扣说明:

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

余额充值