Opencv(C++)笔记--腐蚀与膨胀操作、创建滑动条

news2025/1/11 18:33:07

目录

1--膨胀操作

2--腐蚀操作

3--腐蚀和膨胀的作用

4--创建滑动条

5--实例代码


1--膨胀操作

① 原理:

        将图像(原图像的一部分 A )与核矩阵(结构元素 B )进行运算,将结构元素 B 覆盖图像 A,A 中与结构元素 B 锚点相重合的像素点,其像素值替换为 B 覆盖范围内最大的像素值。

② Opencv API:

// 生成指定形状的结构元素,用于下面腐蚀和膨胀操作的结构元素(核矩阵)
cv::Mat structureElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(s,s), cv::Point(-1, -1)); 

cv::dilate(src, dst, structureElement, cv::Point(-1, -1), 1); // 膨胀

src 表示输入的源图像,dst 表示膨胀处理后的图像,kernel 表示使用的结构元素 B,Point 默认为(-1, -1)表示结构元素 B 的中心点,iteration 表示膨胀的次数;

2--腐蚀操作

① 原理:

        原理与膨胀操作类似,只是 A 中像素点的像素值替换为结构元素B覆盖范围内的最小像素值;

② Opencv API:

// 生成指定形状的结构元素,用于下面腐蚀和膨胀操作的结构元素(核矩阵)
cv::Mat structureElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(s,s), cv::Point(-1, -1)); 

cv::erode(src, dst, structureElement, cv::Point(-1, -1), 1); // 腐蚀

src 表示输入的源图像,dst 表示腐蚀处理后的图像,kernel 表示使用的结构元素 B,Point 默认为(-1, -1)表示结构元素 B 的中心点,iteration 表示腐蚀的次数;

3--腐蚀和膨胀的作用

① 消除噪声;

② 分割出独立的图像元素,在图像中连接相邻的元素;

③ 寻找图像中的极大值或者极小值区域;

④ 求出图像的梯度;

膨胀能使图像中的高亮区域增长,桥接缝隙,消除细小的黑点;

而腐蚀操作会使图像中的高亮区逐渐减小,消除“桥梁”,消除细小的白点;

4--创建滑动条

① 使用 cv::createTrackbar() 创建滑动条

char OUTPUT_WIN[] = "output";
cv::namedWindow(OUTPUT_WIN);
cv::createTrackbar("Element Size :", OUTPUT_WIN, &element_size, max_size, CallBack_Demo);

trackbarname:表示滑动条的名称;

winname:绑定的窗口名称;

value:设定滑动条的初始值;

count:滑动条的最大值;

onChange = 0:绑定的回调函数;

userdata = 0:用户的数据被用于传入给回调函数(回调函数的第二个参数)

注:TrackbarCallback 回调函数 必须为 void(int,void*);

5--实例代码

#include <opencv2/opencv.hpp>
# include<cstdio>
using namespace std;

cv::Mat src;
cv::Mat dst;
int element_size = 3;
int max_size = 5;
char OUTPUT_WIN[] = "output";

void CallBack_Demo(int, void*){ // cv::createTrackbar的回调函数规定只能使用上述两个参数
    int s = element_size * 2 + 1;
    // 生成指定形状的结构元素,用于下面腐蚀和膨胀操作的结构元素(核矩阵)
    cv::Mat structureElement = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(s,s), cv::Point(-1, -1)); 

    //cv::erode(src, dst, structureElement, cv::Point(-1, -1), 1); // 腐蚀
    cv::dilate(src, dst, structureElement, cv::Point(-1, -1), 1); // 膨胀

    cv::imshow(OUTPUT_WIN, dst);
}

int main(int argc, char** argv){

    src = cv::imread("./test1.jpg");
    if (src.empty()){
        printf("could not load image..\n");
        return -1;
    }
    cv::imshow("input", src);

    cv::namedWindow(OUTPUT_WIN);
    cv::createTrackbar("Element Size :", OUTPUT_WIN, &element_size, max_size, CallBack_Demo);
    CallBack_Demo(0, 0);

    cv::waitKey(0);
    return 0;
}

分析:上述代码创建了一个滑动条,名称为“Element Size :”,设定的初始值为3,最大值为5,绑定的回调函数为 CallBack_Demo(int, void*),每拖动一次滑块条,都会执行一次回调函数,对图像进行相应参数的膨胀操作;

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

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

相关文章

[附源码]Nodejs计算机毕业设计基于的数字图书馆系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

离散被解释变量

一、二值选择模型 采用probit或者logit模型 logit y x1 x2 ,nolog r vce(cluster clustervar) ornolog表示不用显示迭代过程vce(cluster cluster)表示运用聚类标准误&#xff0c;由于二值选择模型一般采用稳健标准误的意义不大&#xff0c;所以常常使用聚类标准误。or 表示结…

数据可视化:对比漏斗图多维度分析大学在校实际开销情况

都说80后90后是“苦逼”的一代&#xff0c;他们读小学的时候&#xff0c;上大学免费&#xff1b;等到他们上大学了&#xff0c;读小学免费。可事实真的是这样吗&#xff1f;下面小编用一款数据可视化软件&#xff0c;带你解读一下现在的大学生&#xff0c;开销到底有多少。 漏…

怎样判断一个变量是数组还是对象?

判断的基本方法 1. typeof(不可以) 通常情况下&#xff0c;我们第一时间会想到typeof运算符&#xff0c;因为typeof是专门用于类型检测的&#xff0c;但是typeof并不能满足这样的需求&#xff0c;比如 let a [7,4,1] console.log(typeof(a)) //输出object 复制代码 2. in…

以太网 VLAN的5种划分方式(基于端口、基于MAC地址、基于IP子网、基于协议、基于策略)介绍与基础配置命令

2.8.3 以太网 VLAN&#xff08;VLAN划分方式&#xff09; VLAN的划分方式有2.8.3 以太网 VLAN&#xff08;VLAN划分方式&#xff09;一、基于端口划分二、基于MAC地址划分三、基于IP子网划分四、基于协议划分五、基于策略划分一、基于端口划分 简述&#xff1a;端口上进行手动…

bitset位图的介绍与使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录bitset的介绍位图的引入位图的概念位图的应用bitset的使用bitset的定义方式bitset的成员函数bitset运算符的使用如有错误&#xff0c;多多指教&#xff01;bitset的介…

传奇GEE引擎微端架设教程

传奇GEE引擎微端架设教程 GEE引擎架设微端需要准备好微端程序&#xff0c;用网站下载在服务器的版本 Mirserver文件一般都是自带微端程序的&#xff0c;偶尔也有版本没有微端程序那我们只需要到别的版本或者资源把微端程序拉到我们的文件夹里面D&#xff1a;\Mirserver 这个就…

MyBatisPlus常用注解

MyBatisPlus常用注解 TableName&#xff1a;自定义表名 给User实体类添加注解 aplication.yml中添加mp的配置 # 配置mp的日志 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 设置MyBatis-Plus的全局配置global-config:db-config:table…

java基础巩固-宇宙第一AiYWM:为了维持生计,架构知识+分布式微服务+高并发高可用高性能知识序幕就此拉开(三:注册中心balabala)~整起

比如咱们作为客户端进行购物时&#xff0c;那么多服务提供者【服务提供者有很多实例&#xff0c;可能人家已经搞了拆分模块后的分布式集群&#xff0c;那实例就不少啦】&#xff0c;如果用非技术的眼光看就是&#xff0c;你提供多个&#xff0c;我挑一个买&#xff0c;咱们的访…

立足浙江 辐射全国 护航数字经济发展|美创科技亮相首届数贸会

12月11日-14日&#xff0c;首届全球数字贸易博览会在杭州隆重召开。作为国内唯一经党中央、国务院批准的以数字贸易为主题的国家级、全球性专业博览会&#xff0c;首届数贸会由浙江省人民政府和商务部联合主办&#xff0c;杭州市人民政府、浙江省商务厅和商务部贸发局共同承办。…

EtherCAT设备协议详解二、EtherCAT状态机及配置流程

EtherCAT状态机&#xff08;ESM&#xff09; EtherCAT状态机定义了每个EtherCAT从站设备的分步设置&#xff0c;并指示了可用的功能。设备可以拒绝来自主站的状态请求&#xff0c;并通过错误指示&#xff08;AL 状态寄存器中的错误标志&#xff09;和相关错误代码&#xff08;A…

Linux高级 I/O

目录 一、五种I/O模型 1. 阻塞式I/O 2. 非阻塞式I/O 3. I/O复用&#xff08;多路转接&#xff09; 4. 信号驱动式I/O 5. 异步I/O 二、五种I/O模型的比较 三、I/O复用典型使用在下列网络应用场合 一、五种I/O模型 阻塞式I/O非阻塞式I/OI/O复用&#xff08;多路转接&a…

ios 计算label宽度方法效率对比

方式1&#xff1a; 设置好label的文字&#xff0c;字号等属性后&#xff0c;调用 self.label.text "111"; self.label.font [UIFont systemFontOfSize:17]; [self.label sizeToFit]; 方式2&#xff1a; 使用字符串的方法计算文字宽度&#xff0c; - (CGRect)boun…

TheFuck—Python写的超实用命令纠正工具

序言 哈喽兄弟们&#xff0c;我们在学习Python的过程中&#xff0c;有这么一款工具&#xff0c;可以轻松纠正我们写错的命令&#xff0c;简直太好用了~ The Fuck 是一款功能强大的、Python编写的应用程序&#xff0c;可用于纠正控制台命令中的错误&#xff0c;非常强大。此外…

Linux多线程(二):线程控制

文章目录一、前言二、认识线程控制函数1.线程创建2.线程退出3.线程等待4.查看线程id5.线程分离6.综合demo三、线程id本质是地址&#xff1f;一、前言 上篇博客谈到&#xff0c;Linux并没有真线程&#xff0c;而是通过复用进程的数据结构来模拟实现线程的。因此 Linux 自然不会提…

所有的为时已晚都是恰逢其时,社科院与杜兰大学金融管理硕士邀你在职读研

最近有咨询的同学询问&#xff0c;我年龄快35岁了读研晚吗&#xff1f;记得在网上看到过一句话&#xff0c;你觉得为时已晚的时候&#xff0c;恰恰是最早的时候。你可以确定一下你的内心&#xff0c;是不是真的想读研&#xff0c;既然迟早要读的话&#xff0c;与其等到了40、50…

ISO 15765-2协议分享(一)- TP时间参数详解

文章目录 前言一、时间参数协议定义二、使用步骤 1.引入库2.读入数据总结前言 无大志者常立志,让自己生活中时时有目标,有努力的方向。 老规矩,正文前分享喜欢的文字: 生活中,你越是去竭力回避不适的感觉,就越是难以推进生活中的重要转变。 不回避,积极面对,是提升自…

蓝奥声网关为什么会受到广大用户的欢迎?

蓝奥声GP20蓝牙网关是一款支持无线和有线连接的智能网关&#xff0c;配有独特的网口驱动&#xff0c;支持带有TCP/IP的以太网接口。用于互联网访问和与主机服务器的通信&#xff0c;用于远程命令和本地处理数据的数据上传/下载。它支持 RJ45/POE 和 WiFi 两种网络角色。 GP20蓝…

点面科技荣获优胜企业奖,圆满从2022“创·在上海”国际创新创业大赛之“创·加速营”毕业

创在上海 赢在未来 “创在上海”国际创新创业大赛暨中国创新创业大赛 (上海赛区) 是一项具有广泛影响力的创新创业活动。 为提升入围全国赛的参赛企业的参赛能力&#xff0c;“创在上海”将充分整合和调动多方资源&#xff0c;结合国赛进程&#xff0c;创新推出针对入围国赛企…

Git常用命令总结

配置git 本地创建 ssh key&#xff1a; ssh keygen -t rsa -c “email” // email:github上注册用的邮箱 把上面生成的 key 粘贴到 gitHUb中的 sshkey中 验证 是否成功 ssh -T gitgithub.com 如果是第一次的会 提示 是否continue &#xff0c;输入 yes 就会看到 You’ve succe…