【OpenCV】(七)—— 滤波

OpenCV 中的滤波操作用于去除图像噪声,实现图像的平滑处理,改善图像质量或提取有用的信息。使用一张有噪声的图像作为示例

均值滤波

均值滤波是一种简单的线性滤波技术,通过将像素点周围邻域内的所有像素值取平均来达到平滑图像的效果,可以用来减少噪声。opencv中均值滤波使用方法blur,其函数原型如下:

复制代码
cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) -> dst

参数说明

  • src: 输入图像。
  • ksize: 滤波器窗口的大小,格式为 (宽度, 高度)。例如,(5, 5) 表示一个 5x5 的滤波器窗口。
  • dst: 输出图像。如果未指定,则默认与输入图像具有相同的类型和大小。
  • anchor: 锚点位置,默认为 (-1, -1),表示锚点位于滤波器窗口的中心。
  • borderType: 边界填充方式,默认为cv2.BORDER_DEFAULT。常见的边界填充方式有:
    • cv2.BORDER_CONSTANT: 用常数值填充边界。
    • cv2.BORDER_REFLECT: 用镜像反射的方式填充边界。
    • cv2.BORDER_REPLICATE: 用边界像素值重复填充边界。
    • cv2.BORDER_WRAP: 用环绕方式填充边界。
py 复制代码
# 均值滤波 类似于平均卷积
blur = cv2.blur(img,(3,3))
cv_show('blur',blur)

运行结果:

高斯滤波

高斯滤波也是一种平滑滤波器,但它使用的是高斯权重矩阵,这样可以使滤波效果更加自然,对边缘信息的保留也更好。相当于选取一个像素点,其周围像素距离越近权重越高。高斯滤波在opencv中使用方法gaussian实现,其函数原型如下:

复制代码
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) -> dst

参数说明

  • src: 输入图像。
  • ksize: 滤波器窗口的大小,格式为 (宽度, 高度)。例如,(5, 5) 表示一个 5x5 的滤波器窗口。
  • sigmaX: 高斯核在 X 方向上的标准差。如果设置为 0,OpenCV 会根据 ksize 自动计算。
  • dst: 输出图像。如果未指定,则默认与输入图像具有相同的类型和大小。
  • sigmaY: 高斯核在 Y 方向上的标准差。如果未指定,则默认等于 sigmaX
  • borderType: 边界填充方式,默认为cv2.BORDER_DEFAULT。常见的边界填充方式有:
    • cv2.BORDER_CONSTANT: 用常数值填充边界。
    • cv2.BORDER_REFLECT: 用镜像反射的方式填充边界。
    • cv2.BORDER_REPLICATE: 用边界像素值重复填充边界。
    • cv2.BORDER_WRAP: 用环绕方式填充边界。
py 复制代码
#高斯滤波,相当于在均值滤波的基础上添加了权重,离中心点越近,权重越高,1 为标准差
gaussian = cv2.GaussianBlur(img,(5,5),1)
cv_show('gaussian',gaussian)

中值滤波

中值滤波是非线性的滤波方法,主要用于去除椒盐噪声。它的工作原理是用邻域内所有像素值的中位数替换中心像素值。中值滤波在opencv中使用medianBlur方法,其函数原型如下:

复制代码
cv2.medianBlur(src, ksize[, dst]) -> dst

参数说明

  • src: 输入图像。
  • ksize: 滤波器窗口的大小,必须是大于 1 的奇数。例如,5 表示一个 5x5 的滤波器窗口。
  • dst: 输出图像。如果未指定,则默认与输入图像具有相同的类型和大小。
py 复制代码
# 中值滤波,围绕中心点的数据中从大到小排序,取中值
median = cv2.medianBlur(img,5)
cv_show('median',median)

上述三种方法各有不同,让我们将这些结果放到一起进行对比观察一下,因为opencv所有的图像信息都是numpy数组,在此处使用numpy进行拼接展示

py 复制代码
# 对比展示所有图片
res = np.hstack((blur,gaussian,median))
cv_show("res",res)
相关推荐
J_Xiong01179 分钟前
【LLMs篇】14:扩散语言模型的理论优势与局限性
人工智能·语言模型·自然语言处理
红衣小蛇妖1 小时前
神经网络-Day44
人工智能·深度学习·神经网络
忠于明白1 小时前
Spring AI 核心工作流
人工智能·spring·大模型应用开发·spring ai·ai 应用商业化
且慢.5891 小时前
Python_day47
python·深度学习·计算机视觉
大写-凌祁2 小时前
论文阅读:HySCDG生成式数据处理流程
论文阅读·人工智能·笔记·python·机器学习
Unpredictable2222 小时前
【VINS-Mono算法深度解析:边缘化策略、初始化与关键技术】
c++·笔记·算法·ubuntu·计算机视觉
柯南二号2 小时前
深入理解 Agent 与 LLM 的区别:从智能体到语言模型
人工智能·机器学习·llm·agent
珂朵莉MM2 小时前
2021 RoboCom 世界机器人开发者大赛-高职组(初赛)解题报告 | 珂学家
java·开发语言·人工智能·算法·职场和发展·机器人
IT_陈寒2 小时前
Element Plus 2.10.0 重磅发布!新增Splitter组件
前端·人工智能·后端