opencv中的各种滤波器简介

ops/2024/12/27 10:47:32/

在 OpenCV 中,滤波器是图像处理中的重要工具,用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。


1. 均值滤波 (Mean Filter)

功能

对图像进行平滑处理,减少噪声。

应用场景
  • 去除图像中的细小噪声。
  • 模糊图像,弱化细节。
操作原理

使用一个固定大小的卷积核(如 3×3 或 5×5),计算该核内像素的平均值,并用平均值替换中心像素。

示例代码
python"># img: 输入图像 
# (5, 5): 卷积核大小(5x5) 
img_mean = cv2.blur(img, (5, 5))

2. 方盒滤波 (Box Filter)

功能

类似于均值滤波,但可以选择是否归一化结果。

应用场景
  • 图像平滑。
  • 快速模糊处理。
操作原理

计算卷积核区域内所有像素的平均值(归一化),或者仅计算总和(不归一化)。

示例代码
python"># img: 输入图像
# -1: 输出图像的深度与输入相同
# (5, 5): 卷积核大小
# normalize=True: 归一化使结果为平均值
img_box = cv2.boxFilter(img, -1, (5, 5), normalize=True)

3. 高斯滤波 (Gaussian Filter)

功能

平滑图像,减少噪声,同时尽可能保留边缘信息。

应用场景
  • 去除高斯噪声。
  • 模糊处理,常用于计算机视觉中的预处理步骤。
操作原理

使用一个基于高斯分布权重的卷积核,距离中心越近的像素权重越大,生成平滑效果。

示例代码
python"># img: 输入图像
# (5, 5): 高斯核大小
# 0: 根据核大小自动计算高斯分布标准差
img_gaussian = cv2.GaussianBlur(img, (5, 5), 0)

4. 中值滤波 (Median Filter)

功能

对图像进行平滑,去除“椒盐噪声”,保留边缘。

应用场景
  • 图像去噪,特别是去除“盐和胡椒噪声”。
  • 保留图像的边缘细节。
操作原理

取卷积核内像素的中值,替代中心像素的值。

示例代码
python"># img: 输入图像
# 5: 核大小(5x5)
img_median = cv2.medianBlur(img, 5)

5. 双边滤波 (Bilateral Filter)

功能

在平滑图像的同时,保留边缘细节。

应用场景
  • 美颜和图像增强。
  • 去除噪声的同时保留图像边缘。
操作原理

结合空间距离和像素值相似度加权,计算加权平均值。空间距离控制模糊范围,像素值相似度控制边缘保留。

示例代码
python"># img: 输入图像
# d=15: 过滤时每个像素邻域的直径
# sigmaColor=75: 色彩空间的标准差(控制相似度范围)
# sigmaSpace=75: 坐标空间的标准差(控制距离影响范围)
img_bilateral = cv2.bilateralFilter(img, d=15, sigmaColor=75, sigmaSpace=75)

6. Sobel 算子 (Sobel Filter)

功能

边缘检测,提取图像的梯度信息。

应用场景
  • 图像梯度计算。
  • 边缘检测中的预处理。
操作原理

计算图像的一阶导数,通过不同方向的卷积核计算水平或垂直方向的梯度。

示例代码
python"># img: 输入图像
# cv2.CV_64F: 输出图像的深度
# dx=1, dy=0: 对x求一阶导数
# ksize=3: 卷积核大小(3x3)
sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)# dx=0, dy=1: 对y求一阶导数
sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)

7. Scharr 算子

功能

精确边缘检测,计算梯度比 Sobel 算子更精确。

应用场景
  • 高精度边缘检测。
  • 对细节要求较高的梯度计算。
操作原理

改进的 Sobel 算子,使用优化的 3×33 \times 33×3 卷积核,减少梯度计算的误差。

示例代码
python"># img: 输入图像
# cv2.CV_64F: 输出图像的深度
# dx=1, dy=0: 对x求一阶导数
scharr_x = cv2.Scharr(img, cv2.CV_64F, 1, 0)# dx=0, dy=1: 对y求一阶导数
scharr_y = cv2.Scharr(img, cv2.CV_64F, 0, 1)

8. 拉普拉斯算子 (Laplacian Filter)

功能

检测图像边缘,突出图像的结构。

应用场景
  • 边缘检测。
  • 提取图像的细节。
操作原理

计算图像的二阶导数,通过检测亮度变化突出边缘。

示例代码
python"># img: 输入图像
# cv2.CV_64F: 输出图像的深度
laplacian = cv2.Laplacian(img, cv2.CV_64F)

9. Canny 边缘检测 (Canny Edge Detection)

功能

精准检测图像的边缘。

应用场景
  • 边缘提取,广泛用于目标检测、分割等领域。
操作原理

Canny 算法由以下步骤组成:

  1. 使用高斯滤波器平滑图像。
  2. 计算图像梯度。
  3. 应用非极大值抑制(NMS)来增强边缘。
  4. 双阈值检测,连接边缘。
示例代码
python"># img: 输入图像
# 100: 最低阈值
# 200: 最高阈值
edges = cv2.Canny(img, 100, 200)

对比总结

滤波器/算子功能适用场景优势
均值滤波平滑图像,去噪声去除小噪声,图像模糊简单高效
方盒滤波类似均值滤波模糊处理可选择归一化
高斯滤波平滑图像,保留边缘去噪,预处理去噪效果优于均值滤波
中值滤波去噪,保留边缘去“椒盐”噪声去噪效果佳,保留细节
双边滤波平滑并保留边缘图像增强边缘保留效果佳
Sobel 算子梯度计算,边缘检测边缘提取可检测方向性边缘
Scharr 算子高精度梯度计算边缘检测,对细节要求高精度更高的梯度计算
拉普拉斯算子边缘检测,突出结构边缘提取检测亮度变化显著的边缘
Canny 算子边缘检测精准边缘提取效果好,抗噪性强

在实际应用中,应根据处理任务的具体需求,选择合适的滤波器和算子。


http://www.ppmy.cn/ops/144635.html

相关文章

docker 容器的基本使用

docker 容器 一、docker是什么? 软件的打包技术,就是将算乱的多个文件打包为一个整体,打包技术在没有docker容器之前,一直是有这种需求的,比如上节课我把我安装的虚拟机给你们打包了,前面的这种打包方式是…

【Where语法全解密】.NET开源ORM框架 SqlSugar 系列

文章目录 前言一、普通表达式查询 Where二、根据SQL查询 where三、动态查询四、动态拼表达式查询 ,拼拉姆达五、条件拼接查询六、链式条件查询七、根据Class查询,根据实查询八、根据Class中主键查询九、根据字典查询十、查询函数十一、Where中有子查询十…

component-后端返回图片(数据)前端进行复制到剪切板

1.前言 ‌Base64编码‌:将图片转换为Base64编码的字符串,然后通过HTTP协议传输到前端。前端接收到Base64字符串后,可以通过JavaScript将其解码并显示为图片。这种方式适合小图片,如logo或验证码,因为Base64编码后的字符…

【生成模型之三】ControlNet Latent Diffusion Models论文详解

论文:《Adding Conditional Control to Text-to-Image Diffusion Models》 我们提出了ControlNet,这是一种神经网络架构,可以将空间条件控制添加到大型预训练的文本到图像扩散模型中。ControlNet 冻结了生产就绪的大型扩散模型,并…

IPC协议获取签名信息

一:IPC协议获取签名信息详解 目录 什么是IPC协议?签名信息概述IPC协议中签名信息获取的流程相关知识点 数字签名原理常见签名算法数据完整性与认证签名的生成与验证IPC中的安全传输 应用场景总结 什么是IPC协议? IPC(Inter-Pro…

Redisson分布式锁的源码解读

之前秒杀项目中就用到了这个 Redisson 分布式锁 &#x1f447;&#xff0c;这篇就一起来看看源码吧&#xff01; tryLock 加锁 流程 // RedissonLock.java Override public boolean tryLock() {return get(tryLockAsync()); }Override public RFuture<Boolean> tryLockAs…

【国产NI替代】基于国产FPGA+兆易创新GD32F450的全国产16振动+2转速(24bits)高精度终端采集板卡

16振动2转速&#xff08;24bits&#xff09;高精度终端采集板卡 采用AG16KF256国产FPGA兆易创新GD32F450 国产ARM的硬件架构&#xff0c;虽然比T3处理器的运算 能力弱&#xff0c;但是具备成本更低&#xff0c;代码更易维护 的特点。 内置算法可以完成特征值的计算以及请求…

深入理解 JVM 垃圾回收机制

在 Java 开发领域&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;的垃圾回收机制是保障程序高效稳定运行的关键环节。它自动处理内存管理中繁琐且易错的垃圾回收任务。 一、垃圾回收的基本概念 在程序运行过程中&#xff0c;会不断创建各种对象&#xff0c;这些对象占用…