OpenCV相机标定与3D重建(30)过滤二值图像中的小斑点函数filterSpeckles()的使用

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

在视差图中过滤掉小的噪声斑点(speckles)。
cv::filterSpeckles 是 OpenCV 库中的一个函数,用于过滤图像或视差图(disparity map)中的小噪声斑点(speckles)。这些斑点通常是由于噪声引起的不希望存在的小区域。通过设定最大斑点大小和斑点与其周围区域之间的亮度差异阈值,该函数能够识别并移除这些斑点,从而提高图像质量或后续处理的准确性。

函数原型

void cv::filterSpeckles
(InputOutputArray 	img,double 	newVal,int 	maxSpeckleSize,double 	maxDiff,InputOutputArray 	buf = noArray() 
)		

参数

  • 参数img 输入的16位有符号视差图像
  • 参数newVal 用于填充斑点的视差值
  • 参数maxSpeckleSize 被视为斑点的最大斑点大小。更大的区域不会受到算法的影响
  • 参数maxDiff 邻近视差像素之间的最大差异,以将它们归为同一个斑点。请注意,由于 StereoBM、StereoSGBM 以及其他算法返回的是定点视差图(其中视差值乘以16),因此在指定此参数值时应考虑这个缩放因子。
  • 参数buf 可选的临时缓冲区,以避免在函数内部进行内存分配。

代码示例

#include <iostream>
#include <opencv2/opencv.hpp>
#include <random>int main()
{// 创建一个 400x400 的灰度图像,初始值为128(中性灰色)cv::Mat img( 400, 400, CV_8UC1, cv::Scalar( 128 ) );// 使用随机数生成器添加一些随机噪声(speckles)std::default_random_engine generator;std::uniform_int_distribution< int > distribution( 0, 255 );for ( int i = 0; i < 1000; ++i ){  // 添加1000个随机噪声点int x                   = distribution( generator ) % img.cols;int y                   = distribution( generator ) % img.rows;img.at< uchar >( y, x ) = distribution( generator );  // 随机亮度值}// 显示原始带噪声的图像cv::imshow( "Original Image with Speckles", img );// 定义 filterSpeckles 函数所需的参数double newVal      = 128;   // 将斑点替换为背景颜色(中性灰色)int maxSpeckleSize = 50;    // 最大斑点尺寸为50个像素double maxDiff     = 32.0;  // 斑点和周围像素的最大亮度差// 创建一个缓冲区用于内部计算cv::Mat buf;// 应用 filterSpeckles 过滤器cv::filterSpeckles( img, newVal, maxSpeckleSize, maxDiff, buf );// 显示结果图像cv::imshow( "Filtered Image", img );cv::waitKey( 0 );return 0;
}

运行结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言期末复习笔记(中)

目录 五、选择控制结构 1.算法中的概念及描述方法 2.关系运算符和逻辑表达式 3.条件运算符和条件表达式 4.两种多分支if 5.switch语句 6.逻辑运算符和逻辑表达式 六、循环控制结构 1.控制循环的方式 2.控制非法输入 3.选择三种循环的一般原则 4.猜数游戏 5.嵌套循环…

android jetpack compose Model对象更新变量 UI不更新、不刷新问题

以前是搞老本行Android原生开发的&#xff0c;因为工作原因&#xff0c;一直在用vue小程序&#xff1b;因为一些工作需要&#xff0c;又需要用到Android原生开发&#xff0c;建了个项目&#xff0c;打开源码一看&#xff0c;天塌了&#xff01;&#xff01;&#xff01;我以前的…

Python的Pandas--Series的创建和实现

1.Series函数的格式&#xff1a; pandas.Series(data,index,dtype,name,copy) data&#xff1a;一组数据&#xff08;ndarray类型、list、dict等类&#xff09;或标量值 index&#xff1a;数据索引标签。如果不指定&#xff0c;默认为整数&#xff0c;从0开始 dtype&#x…

python通过正则匹配SQL

pattern r"(?:[^;]|(?:\\.|[^])*);" sql_list [match.group().strip() for match in re.finditer(pattern, execute_sql) if match.group().strip()]for sql in sql_list:print(sql)(?:[^;]|(?:\\.|[^])*); 匹配 连续的非分号内容 或 单引号包裹的字符串&#…

利用Gurobi追溯模型不可行原因的四种方案及详细案例

文章目录 1. 引言2. 追溯不可行集的四种方法2.1 通过约束增减进行判断2.2 通过computeIIS函数获得冲突集2.3 利用 feasRelaxS() 或 feasRelax() 函数辅助排查2.4 利用 IIS Force 属性1. 引言 模型不可行是一个让工程师头疼的问题,对于复杂模型而言,导致模型不可行的原因可能…

算法工程化工程师

算法工程化工程师是一种结合算法研究与工程开发能力的技术职位&#xff0c;主要职责是将算法从理论研究到实际落地&#xff0c;应用到各种工业或商业场景中。以下是关于这个职位的一些核心内容&#xff1a; 核心职责&#xff1a; 算法实现与优化&#xff1a; 将数学模型或算法…

MySQL和HBase的对比

Mysql &#xff1a;关系型数据库&#xff0c;主要面向 OLTP &#xff0c;支持事务&#xff0c;支持二级索引&#xff0c;支持 sql &#xff0c;支持主从、 Group Replication 架构模型&#xff08;此处以 Innodb 为例&#xff0c;不涉及别的存储引擎&#xff09;。 HBase &am…

mybatis-plus自动填充时间的配置类实现

mybatis-plus自动填充时间的配置类实现 在实际操作过程中&#xff0c;我们并不希望创建时间、修改时间这些来手动进行&#xff0c;而是希望通过自动化来完成&#xff0c;而mybatis-plus则也提供了自动填充功能来实现这一操作&#xff0c;接下来&#xff0c;就来了解一下mybatis…

【软件工程】十万字知识点梳理 | 期末复习专用

原创文章,禁止转载。 文章目录 图CRC卡片用例图类图状态图活动图泳道图软件质量因素自顶向下集成自底向上集成人员与工作量之间的关系时序图关键路径软件结构基本路径测试判定表数据流图(DFD)体系结构设计问题数据字典挣值分析等价划分程序流程图PAD | N-S燃尽图甘特图对象模…

STM32完全学习——FLASH上FATFS文件管理系统

一、需要移植的接口 我们通过看官网的手册&#xff0c;可以看到我们只要完成下面函数的实现&#xff0c;就可以完成移植。我们这里只移植前5个函数&#xff0c;获取时间的函数我们不在这里移植。 二、移植接口函数 DSTATUS disk_status (BYTE pdrv /* Physical drive nmuber…

安卓帧率获取

背景 性能优化&#xff0c;经常用到一些指标&#xff0c;诸如帧率、功耗等。对于普通app来讲&#xff0c; 之前一直使用gfxinfo指令获取丢帧率。但是这个指令无法获取游戏的帧率&#xff0c;查阅资料&#xff0c;发现SurfaceFlinger可以获取游戏帧率。 帧率获取原理 获取当前f…

Redis - Token JWT 概念解析及双token实现分布式session存储实战

Token 定义&#xff1a;令牌&#xff0c;访问资源接口&#xff08;API&#xff09;时所需要的资源凭证 一、Access Token 定义&#xff1a;访问资源接口&#xff08;API&#xff09;时所需要的资源凭证&#xff0c;存储在客户端 组成 组成部分说明uid用户唯一的身份标识time…

软体机器人研究报告:设计方法、材料与驱动、感知与控制

软体机器人因其出色的可变形性和高适应性受到了广泛关注&#xff0c;这些特性使其在医疗、救援、探测等复杂场景中展现出独特的优势和巨大的应用潜力。研究人员对软体机器人的设计方法、材料与驱动技术、感知与控制策略等方面进行深入研究&#xff0c;取得了一系列成果。 本文汇…

imgproxy图像处理的高效与安全

摘要 imgproxy作为一个高效且安全的独立服务器,为图像处理提供了全新的解决方案。它不仅简化了图像调整和转换的过程,还极大地提升了处理速度,确保了整个流程的安全性。通过集成imgproxy,用户可以轻松优化网页上的图像,提高加载速度,改善用户体验。本文将深入探讨imgpro…

获取XML 属性值

<controlActProcess classCode"CACT" moodCode"EVN"><queryByParameter><statusCode code"new"/><queryByParameterPayload><statusCode code"new"/><actId><value><!--申请单编号-->…

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量&#xff0c;你可以使用以下 SQL 查询语句&#xff1a; SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释&#xff1a; …

RTMW:实时多人2D和3D 全人体姿态估计

单位&#xff1a;上海AI实验室 代码&#xff1a;mmpose/tree/main/projects/rtmpose 系列文章目录 RTMO: 面向高性能单阶段的实时多人姿态估计 目录 系列文章目录摘要一、背景二、相关工作2.1 自上而下的方法。2.2 坐标分类。2.3 3D Pose 3 实验方法3.1.1 任务限制3.1.3训练技…

操作系统之同步与互斥的基本概念

1. 同步的基本概念 定义&#xff1a;同步是指在多个并发执行的进程或线程之间协调其行为&#xff0c;以使它们能够正确地相互合作。在计算机科学中&#xff0c;同步通常指对共享资源进行访问控制&#xff0c;以避免竞争条件和死锁等问题。 实现方式&#xff1a;为了实现同步&a…

Lua元表

哈喽&#xff0c;好久没有做记录了&#xff0c;最近刚好有时间打算整理一些基础常用内容&#xff0c;先做一期关于Lua相关的内容热热身。如果内容有误&#xff0c;欢迎大家指出我会积极做出响应。 在Lua中&#xff0c;元表&#xff08;metatable&#xff09; 和 元方法&#xf…

香橙派5Plus启动报错bug: spinlock bad magic on cpu#6, systemd-udevd/443

一、问题 如图&#xff1a; 接上调试串口&#xff0c;每次启动都会报错。不过使用过程中没有发现有什么影响。 百度查阅&#xff0c;有一位博主提到&#xff0c;但是没有细说解决方案&#xff1a; spinlock变量没有初始化_spinlock bad magic on-CSDN博客https://blog.csdn.n…