OpenCV查找轮廓
转自:http://westice.javaeye.com/blog/721225
- 主要函数是 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对象,里面包含了围线的点
- 可以用上面的方法将点取出,然后画出来
OpenCV查找轮廓相关推荐
- imutils基础(7)使用 OpenCV 查找轮廓中的极值点
今天,我将使用 OpenCV 和 Python 根据轮廓查找极值点. 在本博客的其余部分,我将演示如何根据轮廓找到极北.极南.极东和极西 (x, y) 坐标,如本博文顶部的图像所示. 虽然这项技能本身 ...
- python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合
针对物体轮廓,opencv还提供了一些相关的函数,来处理轮廓查找,绘制,拟合,以及计算轮廓周长和面积等,详细介绍如下: 1. 寻找和绘制轮廓 opencv的findContours()能寻找图片中的轮 ...
- python使用opencv查找轮廓_Python+opencv学习记录20:轮廓发现,Pythonopencv
1.轮廓发现 轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果. 1.1发现轮廓 在此步骤中我们会使用到findContours这个API,其原型为: ...
- 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍
计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...
- OpenCV的轮廓查找和填充
OpenCV的轮廓查找有C版本和C++版本,当轮廓比较复杂的时候,例如嵌入多层轮廓,如果方法不当那么很容易会漏处理一些轮廓.本文介绍了复杂轮廓场景下的几种主要的查找轮廓和颜色填充方法. 1:cvFin ...
- opencv 查找并绘制轮廓
一个轮廓一般对应一系列的点, 也就是图像中的一条曲线.其表示方法可能根据不同的情况而有所不同. 在opencv中可以用findContours()函数从二值图像查找轮廓 findContours()函 ...
- OpenCV使用findContours查找轮廓和相关函数——C++
OpenCV使用findContours查找轮廓和相关函数--C++ findContours函数的使用 findContours函数的使用 //查找前景的区域 vector<vector< ...
- OPENCV图像轮廓检测
前面在图像转换的时候学到canny算子,可以检测出图像的轮廓信息,但是,该算子检测到的轮廓信息还需要我们手动的用眼睛去识别,而实际工程应用中,我们需要得到轮廓的具体数学信息,这就涉及到今天的主题,图像 ...
- autojs查找轮廓相似的图片
牙叔教程 简单易懂 效果展示 查找右上角的叉叉按钮 缘起 很多人都在想怎么查找右上角这个叉叉, 然后有人问我, 我就研究一下 环境 手机: Mi 11 Pro Android版本: 11 Autojs ...
最新文章
- 探React Hooks
- 中国是恶意程序感染率最高的国家
- 1.MySQL基本体系
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)...
- centos7恢复mysql数据库_mysql数据库恢复过程记录
- 数据科学 IPython 笔记本 7.1 Pandas
- (四)Qt实现自定义模型基于QAbstractTableModel
- nvidia refelx_AMD这么猛?!NVIDIA三款新卡胎死腹中
- python3第三方模块安装路径_查看python及其第三方库的版本和安装位置
- Linux 查看系统所有用户
- 【PAT乙】1005 继续(3n+1)猜想 (25分)
- Cglib 如何实现多重代理?
- 简谈百度坐标反转至WGS84的三种思路
- LM4990音频功放芯片
- 翻译狗文档免费下载手册(补充版)
- 如何写好项目规划和方案设计文档
- OpenCasCade与NURBS——B样条曲线
- 了解云桌面,看这一篇文章就够了
- Unity实现扇形Slider进度条加载功能
- mp3计算机无法识别,MP3\MP4连接windows电脑后无法识别怎么办
热门文章
- 单片机I/O控制方式(UART中断和DMA中断的区别)
- 学习《Linux设备模型浅析之设备篇》笔记(三)
- 实现搜索框记录搜索历史_三个案例告诉你:“搜索框”该如何设计?
- hbase 数据插入指定rowkey_「HBase大爆炸」HBase之常用Shell命令
- 残差平方和ssr的计算公式为_如何为你的回归问题选择最合适的机器学习方法?...
- 占用栅格地图算法的理解
- json格式天气数据的获取,jsonp方式获取统计图数据
- AutoCAD 2D与3D大师班学习教程 AutoCAD 2D and 3D Masterclass
- 分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结
- Elasticsearch 6.3.1、Head插件 安装及配置