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

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐