OpenCV笔记: 查找轮廓

opencv学习笔记(三十五)查找轮廓 现在终于可以讨论轮廓的问题了。首先我们需要了解轮廓到底是什么?一个轮廓一般对应一系列的点,也就是图像中的一条曲线。表示方法可能根据不同情况而有所不同。有多种方法可以表示曲线。在OpenCV中一般用序列来存储轮廓信息。序列中的每一个元素是曲线中一个点的位置。关于序列表示的轮廓细节将在后面讨论,现在只要简单把轮廓想像为使用CvSeq表示的一系列的点就可以了。1、cvFindCantours()寻找轮廓 阅读详情
OpenCV笔记:
查找轮廓
主要函数是       
cvFindContours(tour_buf,storage,&contour,sizeof(CvContour),  CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
tour_buf 是需要查找轮廓的单通道灰度图像 ,storage 是临时存储区 ,
contour是存储轮廓点的CvSeq实例,
CV_RECT_EXTERNAL 只查找外围轮廓,还有CV_RECT_TREE 


正确调用查找函数后,就是从contour提取轮廓点了
contour可能是空指针,提取前最好判断一下
在提取之前还可以调用一个函数:
contour = cvApproxPoly( contour, sizeof(CvContour), storage, CV_POLY_APPROX_DP, 3, 1 );
可能是拟合,有这一句找出的轮廓线更直。


contour里面包含了很多个轮廓,每个轮廓是单独存放的
要通过一个迭代器遍历里面每一个轮廓,教程里面都没提到,还是看了源代码学来的
CvTreeNodeIterator iterator;
cvInitTreeNodeIterator(&iterator,contour,3);
//把所有轮廓的点收集起来
CvSeq* allpointsSeq = cvCreateSeq(CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvContour),
  sizeof(CvPoint), storage);
while( 0 != (contour = (CvSeq*)cvNextTreeNode(&iterator)) ){ 
//找到一个轮廓就可以用for循环提取里面的点了
//这里遍历CvSeq里面的元素的方法很怪异
onetourlength = contour->total;
//给点数组分配空间,记得释放
CvPoint *points = (CvPoint *)malloc(sizeof(CvPoint) * onetourlength); 
//printf("seqlength:%d\n",seqlength);
CvSeqReader reader;
CvPoint pt = cvPoint(0,0);
cvStartReadSeq(contour,&reader);
//开始提取
for(int i = 0 ;i < onetourlength; i++){
CV_READ_SEQ_ELEM(pt,reader);
points[i] = pt;
cvSeqPush(allpointsSeq,&pt);
}  
//把这个轮廓点找出后,就可以用这些点画个封闭线
cvPolyLine(image,&points,&onetourlength,1,0,CV_RGB(0,255,0),2,8,0);
}


//刚刚已经画出了找出的每个轮廓,还收集了所有轮廓点,
//因此还可以将这些点用一个围线包围起来,即把所有轮廓包围起来
//这里要用到新的函数
CvSeq* hull;
hull = cvConvexHull2(allpointsSeq,0,CV_CLOCKWISE,0);
cvConvexHull2返回一个hull对象,里面包含了围线的点
可以用上面的方法将点取出,然后画出来
Java SE病房管理系统课设实战:JDBC+Swing+SQL Server全流程解析 Java SE是面向对象编程与桌面应用开发的基础技术栈,JDBC则是Java连接关系型数据库的核心API。理解其底层原理,掌握SQL编写、事务控制、异常处理与UI-DB协同逻辑,是构建真实业务系统的关键能力。本内容聚焦传统Java桌面应用开发范式,覆盖Swing界面事件驱动、JDBC手动连接池管理、SQL Server建库建表与外键约束实践、以及课设级工程问题排查(如ClassNotFound、DPI缩放、事务原子性)。适用于高校数据库原理与Java程序设计课程综合实践,尤其适配JDK8、SQL Serve 阅读详情

相关推荐

opencv细胞个数统计

轮廓跟踪 统计细胞面积 周长 个数等信息 opencv

OpenCV—Python 轮廓检测 绘出矩形框(findContours\ boundingRect\rectangle)

1 获取轮廓 OpenCV2获取轮廓主要是用 cv2.findContours() import cv2 import numpy as np imgray = cv2.imread('test.jpg',0) # 以灰度图形式读入 ret,thresh = cv2.threshold(imgray,127,255,0) # 二值化,设定阈值127(大小影响二值化结...

红叶谷 wsp_1138886114的博客 7万+

数据库实验报告--MySQL

数据库完整版报告--MySQL 包括数据库创建、表的创建、视图以及授权和触发器的创建等内容,全是精华!看完点赞加收藏O(∩_∩)O~。

Mortalz7 4924

OpenCV:轮廓检测、查找轮廓、绘制轮廓、凸包、图像的矩特征

日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 3.8 轮廓检测 学习目标 了解图像的轮廓,知道怎么利用OPenCV查找轮廓 知道轮廓的特征 知道图像的矩特征 1 图像的轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓是图像目标的外部特征,这种...

あずにゃん梓喵的博客 1万+

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1164

SSL证书验证:VMware Horizon Client的安全隐患与临时解决方案

本文深入分析了VMware Horizon Client中SSL证书验证失败的安全隐患,提供了临时解决方案与长期防御策略。针对自签名证书、证书链断裂等常见问题,文章详细解析了风险成因,并给出分级响应方案,帮助企业平衡安全与效率。通过实战案例和自动化脚本,指导IT管理员构建主动防御体系,有效降低中间人攻击风险。

weixin_29290863的博客 337

opencv使用findContours寻找物体轮廓

OpenCV中的findContours函数是用来检测物体的轮廓 函数原型: CV_EXPORTS_W void findContours( InputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point()); /**

DayDayUp 2454

学Simulink——基于Simulink的固态变压器(SST)多级协同控制​

本文介绍了基于Simulink的固态变压器(SST)多级协同控制系统设计与仿真方法。SST作为智能电网关键设备,包含AC-DC整流、DC-DC隔离和DC-AC逆变三级变换器。针对级间耦合问题,提出了能量-功率协同控制策略,通过纵向解耦和横向联动实现稳定运行。详细演示了在Simulink中搭建三级主电路、设计协同控制器(含电网定向控制、功率前馈和虚拟惯性控制)的全过程,并通过负载突变测试验证了系统动态性能(直流母线电压波动<2%)。最后给出了工程部署建议,包括数字控制延时补偿、启动序列设计和代码自动生成

xiaoheshang_123的博客 204

【OpenCv】图像的轮廓查找

1 原理   边界或者轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。 在机器视觉领域最常用的轮廓查找的算法之一是 Moore-Neighbor 算法,像素的摩尔邻域 PPP 是与该像素共享顶点或边的 888 个像素的集合。这些像素即 如下图所示的像素P1P1P1、P2P2P2、P3P3P3、P4P4P4、P5P5P5、P6P6P6、P7P7P7和P8P8P8。 摩尔邻域(也称为8 邻域或 间接邻域)是文献中经常出现的一个重要概念。

weixin_53598445的博客 7988

【推荐100个unity插件】Animator 的替代品?—— Animancer Pro插件的使用介绍

Animancer与Unity Animator对比及使用指南 摘要: 本文对比了Animancer与Unity官方Animator的核心差异,分析了Animancer的优势特点。Animancer采用代码驱动模式,相比Animator的状态机系统更灵活高效,支持实时调试、动态混合和深度逻辑集成。文章详细介绍了Animancer的快速使用方法,包括动画播放、切换和触发机制,并区分了免费版与专业版的功能差异。适合需要高效动画开发、复杂交互逻辑的中小项目,为开发者提供了一种现代化的动画解决方案。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2434

Python 爬虫实战:爬取万方数据文献信息

本文介绍了基于Python爬虫技术合规获取万方数据文献信息的方法。通过分析万方数据的请求机制与反爬策略,采用requests库结合Session维持合法会话,实现了文献标题、摘要、作者等核心元数据的提取。文章详细讲解了Token验证、动态请求构造、JSON数据解析等关键技术,并提供了完整可运行代码。同时强调严格遵守《万方数据知识服务平台用户协议》,控制请求频率,仅限学术研究使用。该方案为万方数据文献信息获取提供了标准化解决方案,支持数据清洗、结构化存储及后续分析应用。

2503_91057718的博客 2135

OpenCv cvFindContours 查询轮廓并返回轮廓数量

Hai cvFindContours(binaryim, contourStorage, &contourSeq, sizeof(CvContour),CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0)); &contourSeq是用于储存轮廓的序列 contourSeq->total所表示的是contourSe...

weixin_30443813的博客 2287

用MATLAB计算卡方值

然后,我们计算了期望频数,即在两个分类变量独立的情况下,每个单元格的预期频数。接下来,我们使用卡方检验的公式计算了卡方值。卡方检验是一种常用的统计方法,用于确定两个分类变量之间是否存在相关性。它基于观察到的频数和期望频数之间的差异来评估分类变量之间的独立性。在MATLAB中,我们可以使用。请注意,这只是一个简单的示例代码,用于说明如何使用MATLAB计算卡方值。在实际应用中,您可能需要根据您的具体数据和研究问题进行相应的修改和调整。在上面的代码中,我们首先创建了两个分类变量。函数显示了计算得到的卡方值。

CodeNexus的博客 2658

opencv c语言检测轮廓,查找并绘制轮廓[OpenCV 笔记XX]

好久没有更新了,原谅自己放了个假最近又在赶进度,所以。。。更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号。。。加油加油!在二值图像中寻找轮廓void cv::findContours ( InputOutputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,i...

weixin_35451402的博客 523

【时时三省】vector cast (vcast) 集成测试使用教程

山不在高,有仙则名。水不在深,有龙则灵。----优快云 时时三省。

时时三省的博客 707

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

查找并绘制轮廓[OpenCV 笔记XX]

好久没有更新了,原谅自己放了个假最近又在赶进度,所以。。。更新的内容是很靠后的第八章,因为最近工作要用就先跳了,后面会更新笔记编号。。。加油加油! 在二值图像中寻找轮廓 void cv::findContours ( InputOutputArray image, OutputArrayOfArrays ...

A13120295的博客 272

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OpenCV笔记20:在Python中使用OpenCV查找和绘制轮廓

1、学习目标 在Python中如何使用OpenCV查找轮廓和绘制轮廓。 2、使用的函数方法 轮廓是形状分析和物体检测和识别的有用工具。 函数从二进制图像中检索轮廓。 cv2.findContours() cv2.drawContours() 3、程序 结果 ...

weixin_41788560的博客 759

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Opencv3笔记21——查找并绘制轮廓

1. 寻找轮廓:findContours()函数 2. 绘制轮廓函数drawContours() 3. 基础示例程序:轮廓查找 4. 综合示例 一个轮廓一般对应一系列的点。也就是图像中的一条直线。 1. 寻找轮廓:findContours()函数 函数原型 void findContours(InputOutputArray image,OutputArrayOfAr...

绝尘 1万+

opencv学习笔记9 查找绘制轮廓

一。查找绘制轮廓 1.查找轮廓 2.绘制轮廓 1 #include<opencv.hpp> 2 #include<iostream> 3 #include<vector> 4 using namespace std; 5 using namespace cv; 6 int main(...

weixin_30548917的博客 110

《opencv学习笔记》-- 查找并绘制轮廓

查找并绘制轮廓

ccr的博客 1171

opencv3学习笔记——查找并绘制轮廓findContours

函数 findContours() drawContours() findcontours与drawcontours配合使用,用findcontours找出轮廓后,便可以用drawcontours函数将检测到的轮廓绘制出来。 完整代码 #include<opencv2\opencv.hpp> #include<iostream> using namespace cv; us...

科研鬼才的博客 750

OpenCV学习笔记(十四)之查找轮廓

查找轮廓 查找轮廓是在图像边缘提取的基础上,寻找对象的轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现的结果。 API分析 cv::findContours cv::findCountours( InputArray binImg; //输入图像 OutputArrayOfArrays contours, //发现的轮廓对象 OutputArray hierarchy,//图像的拓扑结构 int mode, //轮廓返回的模式 int method, //发现的方法 Point of

开发小鸽 603

java opencv bytearray转mat_OpenCV学习笔记(十四)之查找轮廓

一. 查找轮廓   查找轮廓是在图像边缘提取的基础上,寻找对象的轮廓的方法。所以边缘提取的阈值选定会影响最终轮廓发现的结果。二. API分析1. cv::findContourscv2. cv::drawContourscv三. 代码流程:输入图像转为灰度图像--cvtColor使用Canny进行边缘提取,得到二值图像使用findContours寻找轮廓使用drawContour...

weixin_39634443的博客 129

OpenCV笔记10:用cvFindContours查找图像轮廓并显示

来源: http://user.qzone.qq.com/513690296/infocenter#!app=2&via=QZ.HashRefresh&pos=1365519612 源代码: #include "stdafx.h" #include "cv.h" #include "cxcore.h" #include "highgui.h" int main( int

gududeyhc的专栏 1379
上一篇: 深入理解iPhone数据持久化
下一篇: OpenCV SURF例子注解
trandy
博客等级 码龄17年 79粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值