当前位置: 首页 > news >正文

opencv中的各种滤波器简介

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


1. 均值滤波 (Mean Filter)

功能

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

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

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

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

2. 方盒滤波 (Box Filter)

功能

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

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

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

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

3. 高斯滤波 (Gaussian Filter)

功能

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

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

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

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

4. 中值滤波 (Median Filter)

功能

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

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

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

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

5. 双边滤波 (Bilateral Filter)

功能

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

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

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

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

6. Sobel 算子 (Sobel Filter)

功能

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

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

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

示例代码
# 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 卷积核,减少梯度计算的误差。

示例代码
# 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)

功能

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

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

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

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

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

功能

精准检测图像的边缘。

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

Canny 算法由以下步骤组成:

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

对比总结

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

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

相关文章:

opencv中的各种滤波器简介

在 OpenCV 中,滤波器是图像处理中的重要工具,用于对图像进行平滑、去噪、边缘检测等操作。以下是几种常见滤波器的简单介绍。 1. 均值滤波 (Mean Filter) 功能: 对图像进行平滑处理,减少噪声。 应用场景: 去除图像…...

[Effective C++]条款36-37 两个绝不

本文初发于 “天目中云的小站”,同步转载于此。 条款36 : 绝不重新定义继承而来的non-virtual函数 本条款很容易理解, 援引以前的条款就可以说明为什么 : 条款34中就提到过 : non-virtual函数意味着接口 强制性实现继承, 它不应当被改变. 重新定义继承而来的non-…...

各种网站(学习资源及其他)

欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...

docker怎么部署高斯数据库

部署高斯数据库(openGauss)到Docker的步骤如下: 安装Docker: 如果您的系统尚未安装Docker,需要先进行安装。以CentOS为例,可以使用以下命令安装Docker: yum install -y docker拉取镜像&#xff…...

VScode中配置ESlint+Prettier详细步骤(图文详情)

VScode中配置ESlintPrettier详细步骤(图文详情) 前置环境: node 18.19.0 vite 3.2.11 vue 3.2.47 本文将不在演示vue3基础工程创建,如果还没有vue3项目工程请参考文章: Vite创建Vue3工程并引入ElementPlus&#x…...

Leetcode打卡:考场就坐

执行结果:通过 题目: 855 考场就坐 在考场里,有 n 个座位排成一行,编号为 0 到 n - 1。 当学生进入考场后,他必须坐在离最近的人最远的座位上。如果有多个这样的座位,他会坐在编号最小的座位上。(另外&am…...

数据库压力测试详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 很多人提到 jmeter 时,只会说到 jmeter进行接口自动化或接口性能测试,其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&#…...

项目测试方案流程详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 作为一名软件测试工程师,为项目制作完成的测试方案并执行,是我们日常工作的重要部分,同时,也是一名合格的软件测试工…...

以二进制形式创建gitea仓库

1、官方文档: 数据库准备 | Gitea Documentation 使用二进制文件安装 | Gitea Documentation 2、具体操作 1)创建gitea数据库 2)检查是否安装 Git。要求 Git 版本 > 2.0。 如需升级git请参考以下链接:linux升级git版本-C…...

Spring(七)Spring Cloud----Feign、Zuul和Apollo

文章目录 一、服务调用Feign1.1 Feign的基本使用1.2 Feign的属性配置1.2.1 Ribbon配置1.2.2 Hystrix配置 二、网关服务Zuul2.1 Zuul的基本使用2.1.1 请求路由2.1.2 请求过滤 2.2 路由详解2.2.1 传统路由配置2.2.2 服务路由配置2.2.3 服务路由的默认规则2.2.4 自定义路由映射规则…...

*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数

选素数 小蓝有一个数 x,每次操作小蓝会选择一个小于 x 的素数 p,然后在 x 成为 p 的倍数前不断将 x 加 1,(如果 x 一开始就是 p 的倍数则 x 不变)。 小乔看到了小蓝进行了 2 次上述操作后得到的结果 n,他想…...

华为云环境下LVS/DR架构的故障诊断优化

本文作者:刘涛 文章目录 前言1.LVS/DR集群的问题2.华为云环境3.问题排查3.1 检查LVS/DR模式配置3.1.1 RS服务器3.1.2 DS服务器 3.2 继续分析抓包结果3.2.1 调整tcpdump抓包过滤条件3.2.2 client向集群VIP发包3.2.3 DS服务器arp消息 3.3 查看丢包3.3.1 监控DS和RS服…...

leetcode hot100除自身以外的数组的乘积

238. 除自身以外数组的乘积 已解答 中等 相关标签 相关企业 提示 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在…...

SQL server学习09-数据库编程(上)

目录 一,了解T-SQL语言 1,常量(标量值) 2,变量 1)局部变量 2)全局变量 二,内置函数 1,字符串函数 2,数学函数 3,日期时间函数 4&#x…...

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里,Flutter 官方除了介绍「历史进程」和「用户案例」之外,也着重提及了未来相关的 roadmap ,其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…...

java全栈day19--Web后端实战(java操作数据库3)

一、MyBatis 1.1介绍 前提引入: controller(控制层)作用:接受请求,响应数据 service(业务层)作用:负责具体的逻辑处理 dao(持久层)作用:数据访问层 一般的访问流程:浏览器发起请求过来,先…...

【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页

本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802958.html?templateId1718516 问题现象 Mybatis-Plus是Mybatis的增强工具,旨在简化开发者的CRUD操作,目前被广泛应用,Mybatis-Plus框架适配了多种…...

Ansible 批量管理华为 CE 交换机

注:本文为 “Ansible 管理华为 CE 交换机” 相关文章合辑。 使用 CloudEngine - Ansible 批量管理华为 CE 交换机 wsf535 IP 属地:贵州 2018.02.05 15:26:05 总体介绍 Ansible 是一个开源的自动化运维工具,AnsibleWorks 成立于 2012 年&a…...

基于自定义注解与 AOP 切面实现接口日志全面数据库存储

基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…...

GraalVM完全指南:云原生时代下使用GraalVM将Spring Boot 3应用转换为高效Linux可执行文件

一、前言 在现代软件开发中,启动速度和资源利用率常常是衡量应用性能的关键指标。对于基于Spring Boot的应用来说,虽然它们易于开发和部署,但JVM的启动时间有时会成为一个瓶颈。本文介绍如何使用GraalVM将Spring Boot 3应用编译成原生Linux可执行文件,从而显著提高启动速度…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...