C++ opencv-3.4.1 提取不规则物体的轮廓

在学习opencv的时候,对一张照片,需要标注照片上物体的不规则轮廓。

如图:

使用opencv进行物体的轮廓处理,关键在于对照片的理解,前期的照片处理的越好最后调用api出来的结果就越接近理想值。

提取照片中物体分如下三步:

  1. 图像去噪,高斯模糊
  2. 二值化
  3. 去除噪点,形态学操作,去除较小的噪点
  4. 进行轮廓查找
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace cv;
using namespace std;
Mat src, dst, gray_src;
char input_image[] = "input image";
char output_image[] = "output image";int main(int argc, char ** argv){src = imread("case6.jpg");if (src.empty()){printf("colud not load image ..\n");return -1;}namedWindow(input_image, CV_WINDOW_AUTOSIZE);namedWindow(output_image, CV_WINDOW_AUTOSIZE);imshow(input_image, src);// 均值降噪Mat blurImg;GaussianBlur(src, blurImg, Size(15, 15), 0, 0);imshow("input image", src);// 二值化Mat binary;cvtColor(blurImg, gray_src, COLOR_BGR2GRAY);threshold(gray_src, binary, 0, 255, THRESH_BINARY | THRESH_TRIANGLE);imshow("binary", binary);// 闭操作进行联通物体内部Mat morphImage;Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));morphologyEx(binary, morphImage, MORPH_CLOSE, kernel, Point(-1, -1), 2);imshow("morphology", morphImage);// 获取最大轮廓vector<vector<Point>> contours;vector<Vec4i> hireachy;findContours(morphImage, contours, hireachy, CV_RETR_EXTERNAL, CHAIN_APPROX_SIMPLE, Point());Mat connImage = Mat::zeros(src.size(), CV_8UC3);for (size_t t = 0; t < contours.size(); t++){Rect rect = boundingRect(contours[t]);if (rect.width < src.cols / 2) continue;if (rect.width > src.cols - 20) continue;double area = contourArea(contours[t]);double len = arcLength(contours[t], true);drawContours(connImage, contours, t, Scalar(0, 0, 255), 1, 8, hireachy);printf("area of star could : %f \n", area);printf("lenght of star could : %f \n", len);}imshow(output_image, connImage);waitKey(0);return 0;
}

二值化

形态学操作

最终的轮廓


 

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

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

相关文章

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——windows应急响应篇

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

【Spring】SpringBoot 配置文件

文章目录 什么是配置文件SpringBoot配置文件配置文件快速入手配置文件的格式properties 配置文件说明properties 基本语法读取配置文件信息properties 配置格式缺点 yml 配置文件说明yml 基本语法使用 yml 连接数据库 yml 使用进阶yml 配置不同数据类型配置对象配置集合配置Map…

【prompt一】Domain Adaptation via Prompt Learning

1.Motivation 当前的UDA方法通过对齐源和目标特征空间来学习域不变特征。这种对齐是由诸如统计差异最小化或对抗性训练等约束施加的。然而&#xff0c;这些约束可能导致语义特征结构的扭曲和类可辨别性的丧失。 在本文中&#xff0c;引入了一种新的UDA提示学习范式&#xff0…

RPC 实战与原理

文章目录 什么是 RPC&#xff1f;RPC 有什么作用&#xff1f;RPC 步骤为什么需要序列化&#xff1f;零拷贝什么是零拷贝&#xff1f;为什么需要零拷贝&#xff1f;如何实现零拷贝&#xff1f;Netty 的零拷贝有何不同&#xff1f; 动态代理实现HTTP/2 特性为什么需要服务发现&am…

ElasticSearch入门介绍和实战

目录 1.ElasticSearch简介 1.1 ElasticSearch&#xff08;简称ES&#xff09; 1.2 ElasticSearch与Lucene的关系 1.3 哪些公司在使用Elasticsearch 1.4 ES vs Solr比较 1.4.1 ES vs Solr 检索速度 2. Lucene全文检索框架 2.1 什么是全文检索 2.2 分词原理之倒排索引…

easypoi通过反射修改表头,poi,workbook修改表头

没废话上代码&#xff0c; 使用easypoi导出时一般会用到一个实体类 提供一个示例代码&#xff1a; 实体类&#xff1a; Data public class TestVO {private String id;Excel(name "字段1")private String findId1;Excel(name "字段2")private String fi…

Windows 10中查找文件的3种方法,就差不多够你查找想要的文件了

本文介绍了在Windows 10计算机上搜索文件的两种主要方法&#xff0c;以及对第三方搜索应用程序的建议和更好地搜索文件的有用提示。 使用任务栏搜索栏进行常规搜索 永久位于屏幕底部的搜索栏是大多数人的首选搜索方法&#xff0c;使用起来毫不费力。如果你不知道在哪里可以找…

2023航天推进理论基础考试划重点(W老师)绪论固体推进剂

1、推进系统的分类&#xff1a; 按工作原理分&#xff0c; 直接反作用发动机(喷气发动机) 火箭发动机、组合发动机、冲压发动机、涡轮喷气发动机、涡轮风扇发动机 间接反作用发动机 活塞式发动机、涡轮螺旋桨发动机、涡轮轴发动机、航空电动机 2、后面不细讲的火箭发动机要…

Windows系统重启Redis服务

Windows系统 在安装Redis的目录下打开终端 执行 redis-cli.exe shutdown先停止 Redis 服务 然后 执行 redis-server.exe启动Redis服务

浅谈Dubbo核心概念及架构流程

浅谈Dubbo核心概念及架构流程 前言重要概念1、SPI2、ServiceBean3、URL4、Invoker 整体流程1、架构图2、调用链路 笔者碎碎言&#xff0c;我们学习Dubbo应该学的是什么&#xff1f; 笔者是一名业务开发&#xff0c;认为一切目的都要为我们的目标服务&#xff0c;即日常工作有帮…

医院智慧能源管理平台,为医疗机构高效控能!

随着医院的不断扩大与发展&#xff0c;能源问题日益严重。大型医院能耗计量点位繁多&#xff0c;数据采集方式落后&#xff0c;难以保证计量管理的准确性与科学性。为了对医院能耗进行精细化管理&#xff0c;实时监测用能情况&#xff0c;需要建议一个完善的监管体系。基于能源…

Java Heap Space堆内存异常处理

Heap Space问题是Java开发中常见的内存溢出问题之一&#xff0c;我们需要理解其原因和表现形式&#xff0c;然后通过优化代码、增加JVM内存和使用垃圾回收机制等方法来解决。 场景 新增数据&#xff0c;富文本插入多张图片&#xff0c;总共总共大小6.6MB&#xff0c;提交报50…

【XML】TinyXML 详解(一):介绍

【C】郭老二博文之&#xff1a;C目录 1、简介 优点&#xff1a; TinyXML 是一个简单、小型的 C XML 解析器&#xff0c;可以轻松集成到项目中。 TinyXML 解析 XML 文档&#xff0c;并根据该文档构建可读取、修改和保存的文档对象模型 (DOM) TinyXML 是在 ZLib 许可下发布的&a…

计算机毕业设计------SSM网上超市购物商城管理系统

项目介绍 本项目分为前后台&#xff0c;分为普通用户、管理员两种角色。前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 登录页面,用户查看,一级分类管理,二级分类管理,商品管理,查看订单,留言管理等功能。 用户角色包含以下功…

如何使用JuiceSSH实现手机端远程连接Linux服务器

文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …

Linux---命令行参数+环境变量

一、命令行参数 int main(int argc,char*argv[]) {//...return 0; } 不知道有没有人见过这样的主函数&#xff0c;它带了两个参数&#xff0c;argv接收的参数就叫做命令行参数&#xff0c;因为它的参数是从命令行来的&#xff0c;给大家演示一下&#xff0c;大家就懂了 命令行…

算法基础之数字三角形

数字三角形 核心思想&#xff1a;线性dp 集合的定义为 f[i][j] –> 到i j点的最大距离 从下往上传值 父节点f[i][j] max(f[i1][j] , f[i1][j1]) w[i][j] 初始化最后一层 f w #include <bits/stdc.h>using namespace std;const int N 510;int w[N][N],f[N][…

java“俄罗斯方块”

首先新建议一个包为Tetris &#xff08;俄罗斯方块&#xff09; 类名也叫做Tetris&#xff1b; 代码运行&#xff1a; package Tetris; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.KeyEvent; import java.aw…

腾讯云服务器免费再领一台是什么意思?

腾讯云免费再领一台轻量应用服务器是什么意思&#xff1f;是指在腾讯云买赠专区活动 https://curl.qcloud.com/oRMoSucP 就是轻量应用服务器买一年&#xff0c;购买的时候可以选择“送同配置3个月”&#xff0c;也可以选择“免费续3个月”&#xff0c;阿腾云atengyun.com活动打…

创新5.1 7.1KX声卡驱动

———————KX声卡驱动——————— &#x1f384;声卡外观 &#x1f384;声卡介绍 &#x1f388;创新5.1 7.1声卡是网络直播&#xff0c;娱乐&#xff0c;唱歌&#xff0c;交友等一种音效内置声卡 &#x1f384;型号 &#x1f388;创新5.1内置声卡sb0060 0090 sn0105…