OpenCV 图像下

OpenCV 图像下
添加椒盐噪声与均值滤波去噪一、前言在实际图像采集过程中由于设备、环境等因素影响图像中经常会出现噪声。常见噪声包括椒盐噪声Salt and Pepper Noise高斯噪声均匀噪声其中椒盐噪声表现为图像中随机出现的黑点和白点。OpenCV 中可以通过添加噪声模拟真实环境然后使用滤波算法进行去噪处理。本文主要介绍如何给图片添加椒盐噪声均值滤波原理使用不同大小卷积核进行去噪比较二、添加椒盐噪声1. 椒盐噪声原理椒盐噪声就是随机将部分像素修改为黑色0白色255例如原图100 120 130 150 160 170加入噪声后100 255 130 0 160 1702. 实现添加椒盐噪声函数代码importcv2importnumpyasnpdefadd_peppersalt_noise(image,n10000):resultimage.copy()# 获取图片高度和宽度h,wimage.shape[:2]# 添加n个噪声点foriinrange(n):# 随机生成坐标xnp.random.randint(0,h)ynp.random.randint(0,w)# 随机生成黑点或者白点ifnp.random.randint(0,2)0:# 椒噪声黑色result[x,y]0else:# 盐噪声白色result[x,y]255returnresult三、读取图片并添加噪声代码imagecv2.imread(3.png)#显示原图cv2.imshow(yuan tu,image)#添加椒盐噪声noiseadd_peppersalt_noise(image)cv2.imshow(noise,noise)cv2.waitKey(0)运行效果原图清晰图片↓加入噪声随机出现黑白点四、均值滤波Mean Blur1. 均值滤波原理均值滤波是一种线性滤波方法。它会计算目标像素周围区域的平均值然后替换中心像素。例如3×3卷积窗口90 100 110 95 120 100 80 105 90中心像素120计算平均(90100110951201008010590)/9得到新的像素值。五、OpenCV实现均值滤波OpenCV函数cv2.blur()格式cv2.blur(src,ksize)参数参数含义src输入图片ksize卷积核大小1. 3×3均值滤波代码blur_1cv2.blur(noise,(3,3))cv2.imshow(blur_1,blur_1)效果优点保留较多细节图片较清晰缺点去噪效果一般2. 63×63均值滤波代码blur_2cv2.blur(noise,(63,63))cv2.imshow(blur_2,blur_2)效果优点去噪能力强缺点图片严重模糊边缘信息丢失六、完整代码importcv2importnumpyasnp# 添加椒盐噪声defadd_peppersalt_noise(image,n10000):resultimage.copy()h,wimage.shape[:2]foriinrange(n):xnp.random.randint(0,h)ynp.random.randint(0,w)ifnp.random.randint(0,2)0:result[x,y]0else:result[x,y]255returnresult#读取图片imagecv2.imread(3.png)#显示原图cv2.imshow(original,image)#添加噪声noiseadd_peppersalt_noise(image)cv2.imshow(noise,noise)#3×3均值滤波blur_1cv2.blur(noise,(3,3))cv2.imshow(blur_3x3,blur_1)#63×63均值滤波blur_2cv2.blur(noise,(63,63))cv2.imshow(blur_63x63,blur_2)cv2.waitKey(0)cv2.destroyAllWindows()七、实验结果分析滤波窗口去噪效果清晰度3×3一般较高63×63明显较低原因卷积核越大参与平均的像素越多平滑效果越明显图像细节损失越严重八、总结本文学习了 OpenCV 中1. 添加椒盐噪声使用随机坐标修改像素result[x,y]0或result[x,y]2552. 均值滤波函数cv2.blur()作用平滑图像降低噪声3. 卷积核大小影响小卷积核清晰度高 去噪弱大卷积核去噪强 图像模糊在实际应用中如果处理椒盐噪声通常使用cv2.medianBlur()中值滤波效果会优于均值滤波因为它能够更好地保留边缘信息。