【opencv】示例-morphology2.cpp 形态学操作:膨胀、腐蚀、开运算、闭运算

45e2d13bc45bff29776375e83145cdaf.png

b1831debea4e3a664ef0258099d12d9d.png

element_shape = MORPH_ELLIPSE;

6e387d5e35257b4456731a90ae76e3d3.png

element_shape = MORPH_RECT

2220835fa2cac410ff19ddbc2cdc9636.png

element_shape = MORPH_CROSS;

7dd9c872190d6543468c63be98e972ce.gif

aedd2f977cce9519a0cb04a70395f6d2.gif

// 包含必要的OpenCV头文件
#include "opencv2/imgproc.hpp" // 图像处理
#include "opencv2/imgcodecs.hpp" // 图像编码解码
#include "opencv2/highgui.hpp" // 高层GUI
#include <stdlib.h> // 标准库函数
#include <stdio.h> // 标准输入输出
#include <string> // 字符串操作// 使用标准的OpenCV命名空间
using namespace cv;// 功能帮助信息的静态函数
static void help(char** argv)
{// 打印帮助信息printf("\nShow off image morphology: erosion, dialation, open and close\n""Call:\n   %s [image]\n""This program also shows use of rect, ellipse and cross kernels\n\n", argv[0]);printf( "Hot keys: \n""\tESC - quit the program\n""\tr - use rectangle structuring element\n""\te - use elliptic structuring element\n""\tc - use cross-shaped structuring element\n""\tSPACE - loop through all the options\n" );
}// 声明原图像和结果图像的矩阵
Mat src, dst;// 默认形状为矩形
int element_shape = MORPH_RECT;// 进行形态学操作的最大迭代数
int max_iters = 10;
// 开运算和闭运算的位置参数
int open_close_pos = 0;
// 腐蚀和膨胀的位置参数
int erode_dilate_pos = 0;// 用于开运算/闭运算的轨迹条的回调函数
static void OpenClose(int, void*)
{int n = open_close_pos;int an = abs(n);// 创建结构元素Mat element = getStructuringElement(element_shape, Size(an*2+1, an*2+1), Point(an, an) );if( n < 0 )// 执行开运算morphologyEx(src, dst, MORPH_OPEN, element);else// 执行闭运算morphologyEx(src, dst, MORPH_CLOSE, element);// 显示结果imshow("Open/Close",dst);
}// 用于腐蚀/膨胀的轨迹条的回调函数
static void ErodeDilate(int, void*)
{int n = erode_dilate_pos;int an = abs(n);// 创建结构元素Mat element = getStructuringElement(element_shape, Size(an*2+1, an*2+1), Point(an, an) );if( n < 0 )// 执行腐蚀erode(src, dst, element);else// 执行膨胀dilate(src, dst, element);// 显示结果imshow("Erode/Dilate",dst);
}// 主函数
int main( int argc, char** argv )
{// 解析命令行参数cv::CommandLineParser parser(argc, argv, "{help h||}{ @image | baboon.jpg | }");if (parser.has("help")){// 如果有帮助命令,显示帮助help(argv);return 0;}// 获取文件名std::string filename = samples::findFile(parser.get<std::string>("@image"));// 读取图片if( (src = imread(filename,IMREAD_COLOR)).empty() ){// 图片为空则显示帮助help(argv);return -1;}// 创建窗口显示输出图像namedWindow("Open/Close",1);namedWindow("Erode/Dilate",1);// 设置轨迹条位置open_close_pos = erode_dilate_pos = max_iters;createTrackbar("iterations", "Open/Close",&open_close_pos,max_iters*2+1,OpenClose);setTrackbarMin("iterations", "Open/Close", -max_iters);setTrackbarMax("iterations", "Open/Close", max_iters);setTrackbarPos("iterations", "Open/Close", 0);createTrackbar("iterations", "Erode/Dilate",&erode_dilate_pos,max_iters*2+1,ErodeDilate);setTrackbarMin("iterations", "Erode/Dilate", -max_iters);setTrackbarMax("iterations", "Erode/Dilate", max_iters);setTrackbarPos("iterations", "Erode/Dilate", 0);// 主循环for(;;){// 根据轨迹条位置执行开闭运算和腐蚀膨胀OpenClose(open_close_pos, 0);ErodeDilate(erode_dilate_pos, 0);// 按键响应char c = (char)waitKey(0);if( c == 27 ) // ESC键退出break;// 更换结构元素的形状if( c == 'e' )element_shape = MORPH_ELLIPSE;else if( c == 'r' )element_shape = MORPH_RECT;else if( c == 'c' )element_shape = MORPH_CROSS;else if( c == ' ' )element_shape = (element_shape + 1) % 3;}return 0;
}
Mat element = getStructuringElement(element_shape, Size(an*2+1, an*2+1), Point(an, an) );

135c073b9acca5d1ec786d1dd496700a.png

morphologyEx(src, dst, MORPH_OPEN, element);

83da2ecaf9a4fc6290b9bcabd29c0a7a.png

morphologyEx(src, dst, MORPH_CLOSE, element);

47e390c63e9baf4d833e0a0b02661685.png

erode(src, dst, element);

fa4a6901efd4d593f24b772984c30ca0.png

dilate(src, dst, element);

7a31b73712eb64a85c4f3cae88bbf3df.png

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

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

相关文章

Zynq学习笔记--AXI 总线概述

目录 1. AXI总线概述 1.1 主要特点 1.2 通道功能 1.3 信号概览 2. AXI Interconnect 2.1 信号说明 2.2 内部结构 3. PS-PL AXI Interface 3.1 AXI FPD/LFP/ACP 3.2 Address Editor 3.3 地址空间 3.4 AXI-DDR 4. 通过ILA观察AXI信号 4.1 AXI 读通道 1. AXI总线概述…

uniapp开发小程序手写板、签名、签字

可以使用这个插件进行操作 手写板-签名签字-lime-signature - DCloud 插件市场 但是目前这个插件没有vue3 setup Composition API的写法。所以对于此文档提供的可以直接使用,需要使用Composition API方式实现的,可以继续看。 因为Composition API方式,更加的简单、灵活,…

在Windows中用命令行编译C项目

在Windows中可以用命令行编译C项目 官方指导文档&#xff1a; 演练&#xff1a;在命令行上编译 C 程序 | Microsoft Learn 在官方文档中可以看到&#xff0c;可以只安装VS的命令行工具集&#xff0c;如下图所示

2.0 Hadoop 运行环境

2.0 Hadoop 运行环境 分类 Hadoop 教程 由于 Hadoop 是为集群设计的软件&#xff0c;所以我们在学习它的使用时难免会遇到在多台计算机上配置 Hadoop 的情况&#xff0c;这对于学习者来说会制造诸多障碍&#xff0c;主要有两个&#xff1a; 昂贵的计算机集群。多计算机构成的…

JVM性能调优——GC日志分析

文章目录 1、概述2、生成GC日志3、Parallel垃圾收集器日志解析3.1、Minor GC3.2、FULL GC 4、G1垃圾收集器日志解析4.1、Minor GC4.2、并发收集4.3、混合收集4.4、Full GC 5、CMS垃圾收集器日志解析5.1、Minor GC5.2、Major GC5.3、浮动垃圾 6、日志解析工具6.1、GCeasy6.2、GC…

SpringBoot项目 jar包方式打包部署

SpringBoot项目 jar包方式打包部署 传统的Web应用进行打包部署&#xff0c;通常会打成war包形式&#xff0c;然后将War包部署到Tomcat等服务器中。 在Spring Boot项目在开发完成后&#xff0c;确实既支持打包成JAR文件也支持打包成WAR文件。然而&#xff0c;官方通常推荐将Sp…

【Godot4.2】CanvasItem绘图函数全解析 - 8.绘制点索引

概述 在示意图绘制过程中或者测试过程中&#xff0c;可能需要标记点的索引。 最常见的形式就是用一个圆圈作为背景&#xff0c;用阿拉伯数字作为索引。 实现的重点是动态计算背景圆的半径。原理是&#xff0c;获取字符串的矩形&#xff0c;取对角线长度的一半作为外接圆的半…

AI PC元年,华为的一张航海图、一艘渡轮和一张船票

今天&#xff0c;从学术研究者到产业投资者&#xff0c;无不认为大模型掀起了一场人工智能的完美风暴。 所谓“完美风暴”&#xff0c;指的是一项新技术的各个要素&#xff0c;以新的方式互相影响、彼此加强&#xff0c;组合在一起形成了摧枯拉朽般的力量。 而我们每个人&#…

【opencv】示例-phase_corr.cpp 捕获视频流并通过计算相位相关性来检测画面中的移动...

// 包含OpenCV库的头文件 #include "opencv2/core.hpp" // 包含OpenCV核心功能 #include "opencv2/videoio.hpp" // 包含视频IO功能 #include "opencv2/highgui.hpp" // 包含高级GUI功能&#xff0c;显示图像 #include "opencv2/imgproc.hp…

Eureka-搭建Eureka步骤

简介&#xff1a; Eureka是Netflix开发的服务发现框架&#xff0c;本身是一个基于REST的服务&#xff0c;主要用于定位运行在AWS域中的中间层服务&#xff0c;以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中&#xff0c;以实…

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程

【OTA】STM32新能源汽车OTA技术ymodem协议PC串口升级过程 文章目录 前言一、实验工具1.串口USB线——烧录APP2生成的BIN文件2.STLINK——烧录BOOT代码和APP1代码3.烧录工具——将BIN文件烧录到单片机中4.FLYMCU——清除芯片FLASH 二、硬件绘制1.原理图2.PCB 三、软件配置1.BOOT…

jenkins通过pipeline部署springboot项目

部署方案&#xff1a; 1、springboot项目不保存部署的pipeline或dockerfile构建脚本等与部署相关的问文件&#xff0c;业务项目只需关心业务&#xff0c;能够正常构建为jar包即可 2、新建一个代码仓库&#xff0c;用于保存项目需要构建的Jenkinsfile 3、jenkins配置pipeline地址…

李廉洋;4.14黄金原油最新资讯,下周一盘走势分析及策略。

现货黄金昨日一度创下2430美元/盎司的历史新高&#xff0c;但随后一路回调至2344美元附近&#xff0c;较历史高位回落近百美元。分析师表示这是因为投资者在被视为过度的价格反弹中获利了结并离场所致。金融机构MKS PAMP SA的金属策略主管Nicky Shiels表示&#xff1a;“随着大…

基于Docker构建CI/CD工具链(六)使用Apifox进行自动化测试

添加测试接口 在Spring Boot Demo项目里实现一个简单的用户管理系统的后端功能。具体需求如下&#xff1a; 实现了一个RESTful API&#xff0c;提供了以下两个接口 &#xff1a; POST请求 /users&#xff1a;用于创建新的用户。GET请求 /users&#xff1a;用于获取所有用户的列…

STC89C52学习笔记(十一)

STC89C52学习笔记&#xff08;十一&#xff09; 综述&#xff1a;本文讲述了直流电机以及PWM调速。 一、直流电机 1、特点 &#xff08;1&#xff09;直流电机能将电能转化位机械能。 &#xff08;2&#xff09;直流电机有两个电极&#xff0c;电极正接时&#xff0c;电机…

【核心完整复现】基于目标级联法的微网群多主体分布式优化调度

1 主要内容 之前发布了华电学报的复现程序《基于目标级联法的微网群多主体分布式优化调度》&#xff0c;具体链接为【防骗版】基于目标级联法的微网群多主体分布式优化调度&#xff0c;虽然对模型及结果进行了复现&#xff0c;但是部分模型细节和参数并没有完全实现&#xff0…

2024长三角快递物流高质量创新发展论坛

2024长三角快递物流供应链与技术装备展览会&#xff08;杭州&#xff09; 2024年7月8-10日 | 杭州国际博览中心 指导单位&#xff1a;浙江省邮政管理局 中国快递协会 主办单位&#xff1a;浙江省快递行业协会 联合主办&#xff1a;上海市快递协会 江苏省快递协会 安徽省快递…

ubuntu22下使用vscode调试redis7源码环境搭建

ubuntu22下使用vscode调试redis7源码环境搭建 ##vscode launch.json配置文件 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0&…

【DL水记】循环神经网络RNN的前世今生,Transformer的崛起,Mamba模型

文章目录 RNN网络简介传统RNN网络结构RNN的分类 长-短期记忆网络 (LSTM)GRU网络横空出世的Transformer网络Self-AttentionVisionTransformer Mamba模型Reference: RNN网络简介 “当人类接触新事物时&#xff0c;他们不会从头开始思考。就像你在阅读这篇文章时&#xff0c;你会根…

目标检测笔记

目标检测笔记 one-stage和two-stage目标检测算法Two-Stage 目标检测算法One-Stage 目标检测算法既然Faster R-CNN使得候选区域生成和目标检测可以在同一个网络中端到端训练&#xff0c;为什么它还是属于Two-stage算法&#xff1f; 目标检测模型&#xff0c;训练中的正负样本是什…