零基础学习opencv 高斯模糊

均值模糊有两种方式,一种是基于平均值,另一种是基于高斯权重的均值模糊

这是二维高斯函数的公式 通过这个公式我们可以计算每个点的权重

G(x,y)就是要求的权重,带入一个点的x和y值,再假定σ的值,就可以得到每个点的权重

因为权重之和要等于一,所以求出来的权重和要除以它本身,就得到了权重矩阵。

通过权重矩阵,我们就能够计算高斯模糊了,将每一个点的灰度值乘权重值,

然后将矩阵的值加起来,就是中心点高斯模糊的值,然后我们就一个一个它进行高斯模糊。

高斯噪声代码如下

def clamp(pv): 限制pv的值在0到255之间

if pv >255:

return 255

    if pv <0:

return 0

    else:

return pv

def gaussin_noise(image): 生成高斯噪声

h, w, c = image.shape  不想说了

for row in range(h): 一个for循环 

for col in range(w): 加上另一个for循环

s = np.random.normal(0,20,3) 生成高斯分布的概率密度随机数 o 为center 20位标准差 3 为形状

## 举例  nd1 = np.random.normal(loc=1,scale=2,size=2)#array([ 3.65202676 -0.6285469 ])

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(b + s[1]) 同理

image[row, col, 2] = clamp(b + s[2]) 同理

cv.imshow("noise_image",image) 打印出来

OpenCV的高斯模糊api:

dst =cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)

1.dst 是返回值,表示进行高斯滤波后得到的处理结果。

2.src是需要处理的图像,即原始图像。它能够有任意数量的通道,并能对各个通道独立处理,图像深度应该是 CV_8U.CV_16U、CV_16、CV_32F 或者 CV_64F 中的一种

3.ksize 是滤波核的大小,滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度。需要注意滤波核的值必级是奇数 

4.sigmaX是卷积核在水平方向上(X 轴方向)的标准差,其控制的是权重比例,

5.sigmaY 同理 

borderType是不用管的值,一般都认为是默认值就好了

高斯模糊可以看成高斯滤波,目的是为了去除高斯噪声

你可能感兴趣的:(零基础学习opencv 高斯模糊)