需要源码和图片请点赞关注收藏后评论区留言私信~~~
在尽量保留原图像信息的情况下,去除图像内噪声、降低细节层次信息等一系列过程,叫作图像的平滑处理(或图像的模糊处理)。实现平滑处理最常用的工具就是滤波器。通过调节滤波器的参数,可以控制图像的平滑程度。OpenCV提供了种类丰富的滤波器,每种滤波器使用的算法均不同,但都能对图像中的像素值进行微调,让图像呈现平滑效果
一、均值滤波器
图像中可能会出现这样一种像素,该像素与周围像素的差别非常大,导致视觉上就能看出该像素无法与周围像素组成可识别的图像信息,降低了整个图像的质量,这种格格不入的像素就是图像的噪声,如果图像中的噪声都是随机的纯黑像素和纯白像素,这种噪声称作椒盐噪声,如下图所示
以一个像素为核心,其周围像素可以组成一个n行n列的矩阵,这样的矩阵结构在滤波操作中被称为滤波核,矩阵的行和列决定了滤波核的大小
3×3的滤波核
均值滤波器可以把图像中的每一个像素都当成滤波核的核心,然后计算所有像素的平均值,最后让核心像素值等于这个平均值
均值滤波计算过程如下
OpenCV将均值滤波器封装成blur方法 语法格式如下
dst=cv2.blur(src,ksize,anchor,borderType)
ksize (高、宽)滤波核大小 滤波核越大 处理之后的图像就越模糊
anchor 可选参数 滤波核的锚点
下面对花朵图像进行均值滤波操作
由下图可见 滤波核越大 那么进行滤波之后的图像就越模糊
部分代码如下
import cv2 img = cv2.imread("amygdaus triloba.jpg") # 读取原图 dst1 = cv2.blur(img, (3,3)) # 使用大小为3*3的滤波核进行均值滤波 dst2 = cv.blur(img, (5, 5)) # 使用大小为5*5的滤波核进行均值滤波 dst3 = v2.blur(img, (9, 9)) # 使用大小为9*9的滤波核进行均值滤波 cv2.imshow(img", img) # 显示原图 cv2.imshow("3*3", dst1) # 显示滤波效果 cv2.imshow("5*5", dst2) cv2.imsow("9*9", dst3) cv2.waitKey() # 按下任何键盘按键后 cv2.destroyAllWindows() # 释放所有窗体
二、中值滤波器
中值滤波器的原理与均值滤波器非常相似,唯一的不同就是不计算像素的平均值,而是将所有像素值排序,把最中间的像素值取出,赋值给核心像素
中值滤波计算原理如下图
OpenCV将中值滤波器封装成medianblur方法 语法如下
dst=cv2.medianBlur(src,ksize)
ksize 滤波核的边长 必须是大于1的奇数 该方法根据此边长自动创建一个正方形的滤波核
处理效果如下
部分代码如下
import cv2ad("amygdalus triloba.jpg") # 读取原图 dst1 = cv2.mednBlur(img, 3) # 使用宽度为3的滤波核进行中值滤波 dst2 = cv2.(img, 5) # 使用宽度为5的滤波核进行中值滤波 dst3 = cv2(img, 9) # 使用宽度为9的滤波核进行中值滤波 cv2.imshow("img", img) # 显示原图 cv2.imhow("3", dst1) # 显示滤波效果 cv2.imshow("5", dst2) cv2.imshw("9",dst3) cv2.waitKey() # 按下任何键盘按键后 cv2.destroyAllWindows() # 释放所有窗体
创作不易 觉得有帮助请点赞关注收藏~~~