【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.rhkb.cn/news/308004.html

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

相关文章

2024年认证杯数学建模挑战赛C题全解析

2024年认证杯C题的已经完成啦&#xff0c;包括参考论文&#xff0c;模型代码&#xff0c;分享给大家&#xff5e; 问题分析 对于这些问题&#xff0c;我们首先需要确定影响日光辐射降低效应的关键参数&#xff0c;例如海盐气溶胶的浓度、粒子大小、分布以及喷洒高度和范围。同…

【央国企专场】——国家电网

国家电网目录 一、电网介绍1、核心业务2、电网组成 二、公司待遇三、公司招聘1、招聘平台2、考试安排2.3 考试内容 一、电网介绍 1、核心业务 国家电网公司&#xff08;State Grid Corporation of China&#xff0c;简称SGCC&#xff09;是中国最大的国有企业之一&#xff0c…

Vue3——html-doc-ja(html导出为word的js库)

一、下载 官方地址 html-doc-js - npm npm install html-doc-js 二、使用方法 // 使用页面中引入 import exportWord from html-doc-js// 配置项以及实现下载方法 const wrap document.getElementById(test)const config {document:document, //默认当前文档的document…

H2O-3机器学习平台源码编译的各种坑

H2O-3机器学习平台是一个非常适合非专业人士学习机器学习的平台&#xff0c;自带WebUI&#xff0c;效果还是蛮不错的&#xff0c;官方也提供了jar包&#xff0c;一条命令就能直接运行&#xff0c;非常方便&#xff0c;但最近有源码编译的需求&#xff0c;实际操作过程中&#x…

【计算机毕业设计】日用百货交易网站——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…

Chatgpt掘金之旅—有爱AI商业实战篇|播客剧本写作|(十三)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业播客剧本写作服务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。…

4、jvm-垃圾收集算法与垃圾收集器

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比如…

最新Zibll子比主题V7.1版本源码 全新推出开心版

源码下载地址&#xff1a;Zibll子比主题V7.1.zip

JavaEE实验三:3.5学生信息查询系统(动态Sql)

题目要求: 使用动态SQL进行条件查询、更新以及复杂查询操作。本实验要求利用本章所学知识完成一个学生信息系统&#xff0c;该系统要求实现3个以下功能: 1、多条件查询&#xff1a; 当用户输入的学生姓名不为空&#xff0c;则根据学生姓名进行学生信息的查询&#xff1b; 当用户…

搭建基于Hexo的个人博客,以及git相关命令

全文写完之后的总结 测试命令 hexo clean hexo g hexo s 上传到服务器命令 hexo clean hexo g hexo d 上传到服务器&#xff08;如果上一个命令用不了&#xff09;&#xff0c;也要先hexo clean,hexo g git init git add . git commit -m "first commit" git p…

jenkins下载安装(mac)

下载官网 具体 直接命令安装 Sample commands: Install the latest LTS version: brew install jenkins-ltsStart the Jenkins service: brew services start jenkins-ltsRestart the Jenkins service: brew services restart jenkins-ltsUpdate the Jenkins version: brew u…

在Linux上利用mingw-w64生成exe文件

一、概要 1、elf与exe 在Linux上用gcc直接编译出来的可执行文件是elf格式的&#xff0c;在Windows上是不能运行的 Windows上可执行文件的格式是exe 利用mingw-w64可以在Linux上生成exe格式的可执行文件&#xff0c;将该exe文件拷贝到Windows上就可以运行 2、程序要留给用户…

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…

PVE下安装配置openwrt和ikuai

开端 openwrt 和 ikuai 是比较出名的软路由系统。我最早接触软路由还是因为我的一个学长要改自己家里的网络&#xff0c;使用软路由去控制网络。我听说后便来了兴致&#xff0c;也在我家搞了一套软路由系统。现在我已经做完了&#xff0c;就想着写个文章记录一下。 软路由简介…

Flutter中间镂空的二维码扫描控件

1、UI效果图&#xff1a; 2、中间镂空UI&#xff1a; class CenterTransparentMask extends CustomClipper<Path> {final double? width;CenterTransparentMask({this.width});overridePath getClip(Size size) {final path Path()..addRect(Rect.fromLTWH(0, 0, size…

Navicat Premium 16 for Mac/Win:数据库管理的全能之选

在数字化时代&#xff0c;数据库管理已成为各行各业不可或缺的一环。而Navicat Premium 16作为一款功能强大的数据库管理软件&#xff0c;无疑为数据库管理员和开发者提供了高效、便捷的解决方案。 Navicat Premium 16支持多种主流数据库系统&#xff0c;无论是MySQL、Postgre…

MyBatis批量插入的五种方式

MyBatis批量插入的五种方式: 一、准备工作 1、导入pom.xml依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MySQL驱动依赖 --…

R:普通分组柱状图

输入文件实例&#xff08;存为csv格式&#xff09; library(ggplot2) library(ggbreak)# 从CSV文件中读取数据 setwd("C:/Users/fordata/Desktop/研究生/第二个想法(16s肠型&#xff0b;宏基因组功能)/第二篇病毒组/result/otherDB") data <- read.csv("feta…

UI自动化测试案例

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

工厂方法模式:解锁灵活的对象创建策略

在软件设计中&#xff0c;工厂方法模式是一种非常实用的创建型设计模式&#xff0c;它不仅提升了系统的灵活性&#xff0c;还简化了对象的创建过程。本文将详细探讨工厂方法模式的核心概念、实现方式、应用场景以及与其他设计模式的对比&#xff0c;旨在提供一份全面且实用的指…