机器视觉-6 检测原理之预处理(滤波)

OpenCV 中的滤波是一种用于图像处理的常用技术,主要用于去噪、平滑、边缘检测、增强图像特征等操作。滤波的基本思想是通过卷积操作,将图像中每个像素与其周围像素值按照一定的权重关系进行组合,从而获得新的像素值。下面我将详细介绍 OpenCV 中常用的几种滤波方法。

1. 平均滤波 (Averaging Filter)

平均滤波是一种简单的线性滤波方法,通常用于平滑图像,减少图像噪声。它通过对滤波窗口内的所有像素取平均值来替换中心像素值,适合快速平滑处理,但容易模糊图像中的细节和边缘。

代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;int main() {// 读取图像Mat image = imread("image.jpg");// 检查图像是否成功加载if (image.empty()) {return -1;}// 使用平均滤波Mat blurred_image;blur(image, blurred_image, Size(5, 5)); // Size(5, 5)表示滤波核的大小// 显示结果imshow("Original Image", image);imshow("Average Filter", blurred_image);waitKey(0);return 0;
}

主要参数:
  • Size(5, 5):滤波核的大小,数值越大,平滑效果越明显,但图像细节损失越多。
  • blur():这是 OpenCV 中用于平均滤波的函数。

2. 高斯滤波 (Gaussian Filter)

高斯滤波是一种权重滤波器,利用高斯函数生成的权重矩阵进行卷积操作。它在去噪的同时,保留了部分图像的边缘信息,因此是去除高斯噪声的常用方法。

代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat image = imread("image.jpg");if (image.empty()) {return -1;}// 使用高斯滤波Mat gaussian_blurred;GaussianBlur(image, gaussian_blurred, Size(5, 5), 1.5); // Size(5, 5)是滤波核大小, 1.5是sigmaX值imshow("Original Image", image);imshow("Gaussian Filter", gaussian_blurred);waitKey(0);return 0;
}

主要参数:
  • Size(5, 5):高斯核的大小。
  • sigmaX:高斯核的标准差,影响平滑程度,值越大平滑效果越强。
  • GaussianBlur():高斯滤波函数。

3. 中值滤波 (Median Filter)

中值滤波是一种非线性滤波方法,通常用于去除图像中的椒盐噪声。它通过对滤波窗口中的像素值排序,选取中间值作为中心像素的新的像素值,可以很好地保护图像的边缘。

代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat image = imread("image.jpg");if (image.empty()) {return -1;}// 使用中值滤波Mat median_blurred;medianBlur(image, median_blurred, 5); // 5是滤波核的大小(必须是奇数)imshow("Original Image", image);imshow("Median Filter", median_blurred);waitKey(0);return 0;
}

主要参数:
  • 5:中值滤波的核大小,必须是奇数。
  • medianBlur():OpenCV 中用于中值滤波的函数。

4. 双边滤波 (Bilateral Filter)

双边滤波是一种可以同时平滑图像并保留边缘细节的滤波器。它通过考虑空间距离和像素值差异来加权邻域像素,因此在平滑区域内部噪声的同时,能有效地保留边缘。

代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat image = imread("image.jpg");if (image.empty()) {return -1;}// 使用双边滤波Mat bilateral_filtered;bilateralFilter(image, bilateral_filtered, 9, 75, 75); // d是邻域直径, sigmaColor和sigmaSpace控制平滑程度imshow("Original Image", image);imshow("Bilateral Filter", bilateral_filtered);waitKey(0);return 0;
}

主要参数:
  • d:表示滤波时使用的邻域直径,如果为负值则根据 sigmaSpace 自动计算。
  • sigmaColor:控制颜色差异的权重,值越大可以使更多的颜色相似像素被平滑。
  • sigmaSpace:控制空间距离的权重,值越大可以使较远的像素影响滤波结果。
  • bilateralFilter():双边滤波函数。

5. 自定义滤波 (Custom Filtering)

通过自定义卷积核,可以实现各种特定的滤波操作。OpenCV 提供了 filter2D() 函数,可以用来对图像应用自定义的卷积核,比如图像锐化、边缘检测等。

代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;int main() {Mat image = imread("image.jpg");if (image.empty()) {return -1;}// 定义一个锐化卷积核Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0,-1, 5, -1,0, -1, 0);// 使用自定义卷积核进行滤波Mat sharpened_image;filter2D(image, sharpened_image, -1, kernel);imshow("Original Image", image);imshow("Sharpened Image", sharpened_image);waitKey(0);return 0;
}

主要参数:
  • kernel:自定义卷积核,这里是一个 3x3 的锐化滤波核。
  • filter2D():OpenCV 中进行自定义卷积操作的函数。

总结

  • 平均滤波:适用于简单的去噪和平滑操作,但容易模糊边缘。
  • 高斯滤波:通过高斯权重平滑图像,适合处理高斯噪声。
  • 中值滤波:能有效去除椒盐噪声,且不会明显模糊边缘。
  • 双边滤波:在平滑的同时能保持边缘细节,适合细节丰富的图像。
  • 自定义滤波:通过自定义卷积核,可以灵活实现各种滤波效果,如锐化、边缘检测等。

每种滤波器都有其特定的用途,实际应用中可以根据图像的特性选择合适的滤波器,也可以组合使用来获得最佳效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145929.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

2024年华为杯研赛(E题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

如何远程访问局域网内的电脑?局域网内远程桌面怎么实现?揭秘4种干货技巧

想象一下&#xff0c;你正在办公室A&#xff0c;而你想访问办公室B里的某台电脑&#xff0c;却不想起身到另一楼层甚至是另一个房间。 如何不动身就能控制局域网内的另一台电脑呢&#xff1f; 这并不是科幻&#xff0c;而是完全可以通过远程桌面技术来实现。 今天&#xff0…

学习Java(一)类和对象

package demo.ceshi;public class Puppy {private int age;private String name;//构造器public Puppy( String name){this.name name;System.out.println("公主的名字叫&#xff1a;"name);}//设置age的值public void setAge(int age){this.age age;System.out.pr…

智慧仓储-AI销量预测

1、预测系统技术选型 基础层&#xff1a; Hbase、ClickHouse、Hdfs 用来做数据存储 框架层&#xff1a; 以 Spark RDD、Spark SQL、Hive 为主&#xff0c; MapReduce 程序占一小部分&#xff0c;是原先遗留下来的&#xff0c;目前正逐步替换成 Spark RDD。 选择 Spark 除了对…

rsyslogd 内存占用很高解决方案

在Kubernetes&#xff08;K8S&#xff09;集群中&#xff0c;监控日志是非常重要的&#xff0c;而rsyslogd是Linux系统中用于处理系统和应用程序日志的守护进程。有时候rsyslogd可能会占用较高的内存&#xff0c;这时候我们就需要对其进行优化和调整。 阿里云虚拟服务器&…

创客中国AIGC专题赛冠军天鹜科技:AI蛋白质设计引领者

“落霞与孤鹜齐飞,秋水共长天一色——这句出自《滕王阁序》的诗句,是我作为江西人熟记于心的佳句。它描绘的天地壮丽景色常浮现于我的脑海,正是这种豁达与壮观,启发我们将公司命名为‘天鹜科技’,我们希望将源自自然的蛋白质与现代科技的创新精神相结合,打造蛋白质设计与应用的…

16_Python的迭代器

在Python中&#xff0c;迭代是一个非常重要的概念。迭代通常指的是按照某种顺序逐个访问容器中的元素的行为。如使用for循环遍历取值的过程。 可迭代对象&#xff08;Iterable&#xff09; 可迭代对象是任何可以返回一个迭代器的对象。简单来说&#xff0c;它是可以逐一返回其…

机器学习模型中特征贡献度分析:预测贡献与错误贡献

在机器学习领域&#xff0c;特征重要性分析是一种广泛应用的模型解释工具。但是特征重要性并不等同于特征质量。本文将探讨特征重要性与特征有效性之间的关系&#xff0c;并引入两个关键概念&#xff1a;预测贡献度和错误贡献度。 核心概念 预测贡献度&#xff1a;衡量特征在…

【C++】—— stack queue deque

【C】—— stack & queue & deque 1 stack 与 queue 的函数接口2 适配器2.1 发现问题2.2 什么是适配器 3 stack 与 queue的模拟实现3.1 栈的基础框架3.2 栈的模拟实现3.3 队列的模拟实现 4 模板的按需实例化5 deque 的简单介绍5.1 vector 与list对比5.1.1 vector5.1.2 …

C++函数重载完成日期类相关计算

本文内容如下&#xff1a; 1.创建类以及函数的声明2.日期加减天数1.月份天数2.函数实现 3.日期比较大小4.日期减日期1.日期的前置和后置加加2.日期减日期的实现 5.内置类型的cout和cin本文代码如下&#xff1a; 要完成日期类的相关计算要创建自定义的类型&#xff0c;然后用函数…

获取IPV6地址的参考网站|nginx解析IPV6|linux服务器获取IPV6的方法

获取IPV6地址的参考网站 网址1 https://v6.ident.me/ 网址2 https://ifconfig.co/ 网址3 https://ifconfig.me/ IPV6检测站点推荐 网址1 http://ipv6-test.ch/ linux服务器获取IPV6的方法 以centos7为例 curl -6 ifconfig.mecurl -6 https://v6.ident.mecurl -6 https:…

python安装-升级

这里写自定义目录标题 欢迎使用Markdown编辑器 欢迎使用Markdown编辑器 运行python 或pycharm时报错 [notice] A new release of pip is available: 23.1.2 -> 24.2 [notice] To update, run: python.exe -m pip install --upgrade pipCMD 进入 DOS C:\Users\wang>pyt…

解密MQ消息积压:让你系统瞬间卡死的幕后黑手

文章目录 什么是MQ消息积压&#xff1f;消息积压的常见原因案例分析&#xff1a;如何处理消息积压&#xff1f;场景1&#xff1a;消费者处理速度过慢场景2&#xff1a;消息生产速度过快 如何预防消息积压&#xff1f;1. **监控与告警**2. **动态扩容**3. **限流与降级**4. **合…

插入与冒泡排序(C++)

\一、插入排序 1 简介 插入排序&#xff0c;也称为直接插入排序&#xff0c;其排序思想和我们平时打扑克牌时排序类似。 2 算法步骤 将第一个元素看作已排序序列&#xff0c;第二个到最后一个看作未排序序列。 第二个元素&#xff0c;与之前已排序号的序列进行对比&#x…

面试题---链表分割(安全性问题)

题目&#xff1a; 现有一链表的头指针 ListNode* pHead&#xff0c;给一定值x&#xff0c;编写一段代码将所有小于x的结点排在其余结点之前&#xff0c;且不能改变原来的数据顺序&#xff0c;返回重新排列后的链表的头指针。 假设有一链表&#xff1a; 给定x6 MySingleList …

乐(智)尚代驾-------Day3(afternoon关于aop特殊一栏)~

谢谢你们的阅读uu们&#xff01;~~ 下午这部分内容是aop往后啦&#xff0c;大家要明确一个思路&#xff0c;用aop进行简化操作更加方便 紧接上部分~ 登录校验 如何判断是否登录状态&#xff1f; – 判断请求头里面是否包含token字符串 – 根据token查询redis 如何实现&…

多源最短路径

文章目录 1. 01 矩阵&#xff08;542&#xff09;2. 飞地的数量&#xff08;1020&#xff09;3. 地图分析&#xff08;1162&#xff09;4. 地图中的最高点&#xff08;1765&#xff09; 1. 01 矩阵&#xff08;542&#xff09; 题目描述&#xff1a; 算法原理&#xff1a; 这…

骨传导耳机怎么选?健身教练测评五大畅销爆款骨传导耳机!

随着健康生活方式的普及&#xff0c;越来越多的人开始注重日常锻炼与健康管理。而在这股健身热潮中&#xff0c;骨传导耳机因其独特的佩戴方式和开放耳道的设计&#xff0c;成为了运动爱好者的新宠。它们不仅能够在运动时提供安全舒适的听觉体验&#xff0c;还能让使用者随时留…

Java入门:09.Java中三大特性(封装、继承、多态)03

5 多态 首先&#xff0c;什么是多态呢&#xff1f; 多态即事物的多种表现形态。 就像生活中&#xff0c;人就有多种表现形态&#xff1a;学生&#xff0c;老师&#xff0c;警察&#xff0c;医生等。 那么在Java中也有类似的概念 它的作用就是&#xff1a;在封装时&#xf…

【Deloitte】AI大模型时代C端应用生态变局

类比PC时代到移动互联网时代的发展&#xff0c;可以窥见AI时代的来临将带来诸多颠覆与创新&#xff0c;这让所有关注AI发展的人们既心生期待又满怀敬畏。 德勤中国《AI大模型时代C端应用生态变局》报告深入探讨了AI对C端应用影响的四大发展趋势。 趋势一&#xff1a;AI 大模型…