转自:http://westice.javaeye.com/blog/721225

  1. 主要函数是       cvFindContours(tour_buf,storage,&contour,sizeof(CvContour),
  2. CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
  3. tour_buf 是需要查找轮廓的单通道灰度图像 ,storage 是临时存储区 ,
  4. contour是存储轮廓点的CvSeq实例,
  5. CV_RECT_EXTERNAL 只查找外围轮廓,还有CV_RECT_TREE
  6. 正确调用查找函数后,就是从contour提取轮廓点了
  7. contour可能是空指针,提取前最好判断一下
  8. 在提取之前还可以调用一个函数:
  9. contour = cvApproxPoly( contour, sizeof(CvContour), storage, CV_POLY_APPROX_DP, 3, 1 );
  10. 可能是拟合,有这一句找出的轮廓线更直。
  11. contour里面包含了很多个轮廓,每个轮廓是单独存放的
  12. 要通过一个迭代器遍历里面每一个轮廓,教程里面都没提到,还是看了源代码学来的
  13. CvTreeNodeIterator iterator;
  14. cvInitTreeNodeIterator(&iterator,contour,3);
  15. //把所有轮廓的点收集起来
  16. CvSeq* allpointsSeq = cvCreateSeq(CV_SEQ_KIND_GENERIC|CV_32SC2, sizeof(CvContour),
  17. sizeof(CvPoint), storage);
  18. while( 0 != (contour = (CvSeq*)cvNextTreeNode(&iterator)) ){
  19. //找到一个轮廓就可以用for循环提取里面的点了
  20. //这里遍历CvSeq里面的元素的方法很怪异
  21. onetourlength = contour->total;
  22. //给点数组分配空间,记得释放
  23. CvPoint *points = (CvPoint *)malloc(sizeof(CvPoint) * onetourlength);
  24. //printf("seqlength:%d/n",seqlength);
  25. CvSeqReader reader;
  26. CvPoint pt = cvPoint(0,0);
  27. cvStartReadSeq(contour,&reader);
  28. //开始提取
  29. for(int i = 0 ;i < onetourlength; i++){
  30. CV_READ_SEQ_ELEM(pt,reader);
  31. points[i] = pt;
  32. cvSeqPush(allpointsSeq,&pt);
  33. }
  34. //把这个轮廓点找出后,就可以用这些点画个封闭线
  35. cvPolyLine(image,&points,&onetourlength,1,0,CV_RGB(0,255,0),2,8,0);
  36. }
  37. //刚刚已经画出了找出的每个轮廓,还收集了所有轮廓点,
  38. //因此还可以将这些点用一个围线包围起来,即把所有轮廓包围起来
  39. //这里要用到新的函数
  40. CvSeq* hull;
  41. hull = cvConvexHull2(allpointsSeq,0,CV_CLOCKWISE,0);
  42. cvConvexHull2返回一个hull对象,里面包含了围线的点
  43. 可以用上面的方法将点取出,然后画出来

OpenCV查找轮廓相关推荐

  1. imutils基础(7)使用 OpenCV 查找轮廓中的极值点

    今天,我将使用 OpenCV 和 Python 根据轮廓查找极值点. 在本博客的其余部分,我将演示如何根据轮廓找到极北.极南.极东和极西 (x, y) 坐标,如本博文顶部的图像所示. 虽然这项技能本身 ...

  2. python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合

    针对物体轮廓,opencv还提供了一些相关的函数,来处理轮廓查找,绘制,拟合,以及计算轮廓周长和面积等,详细介绍如下: 1. 寻找和绘制轮廓 opencv的findContours()能寻找图片中的轮 ...

  3. python使用opencv查找轮廓_Python+opencv学习记录20:轮廓发现,Pythonopencv

    1.轮廓发现 轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果. 1.1发现轮廓 在此步骤中我们会使用到findContours这个API,其原型为: ...

  4. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍

    计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...

  5. OpenCV的轮廓查找和填充

    OpenCV的轮廓查找有C版本和C++版本,当轮廓比较复杂的时候,例如嵌入多层轮廓,如果方法不当那么很容易会漏处理一些轮廓.本文介绍了复杂轮廓场景下的几种主要的查找轮廓和颜色填充方法. 1:cvFin ...

  6. opencv 查找并绘制轮廓

    一个轮廓一般对应一系列的点, 也就是图像中的一条曲线.其表示方法可能根据不同的情况而有所不同. 在opencv中可以用findContours()函数从二值图像查找轮廓 findContours()函 ...

  7. OpenCV使用findContours查找轮廓和相关函数——C++

    OpenCV使用findContours查找轮廓和相关函数--C++ findContours函数的使用 findContours函数的使用 //查找前景的区域 vector<vector< ...

  8. OPENCV图像轮廓检测

    前面在图像转换的时候学到canny算子,可以检测出图像的轮廓信息,但是,该算子检测到的轮廓信息还需要我们手动的用眼睛去识别,而实际工程应用中,我们需要得到轮廓的具体数学信息,这就涉及到今天的主题,图像 ...

  9. autojs查找轮廓相似的图片

    牙叔教程 简单易懂 效果展示 查找右上角的叉叉按钮 缘起 很多人都在想怎么查找右上角这个叉叉, 然后有人问我, 我就研究一下 环境 手机: Mi 11 Pro Android版本: 11 Autojs ...

最新文章

  1. 探React Hooks
  2. 中国是恶意程序感染率最高的国家
  3. 1.MySQL基本体系
  4. 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)...
  5. centos7恢复mysql数据库_mysql数据库恢复过程记录
  6. 数据科学 IPython 笔记本 7.1 Pandas
  7. (四)Qt实现自定义模型基于QAbstractTableModel
  8. nvidia refelx_AMD这么猛?!NVIDIA三款新卡胎死腹中
  9. python3第三方模块安装路径_查看python及其第三方库的版本和安装位置
  10. Linux 查看系统所有用户
  11. 【PAT乙】1005 继续(3n+1)猜想 (25分)
  12. Cglib 如何实现多重代理?
  13. 简谈百度坐标反转至WGS84的三种思路
  14. LM4990音频功放芯片
  15. 翻译狗文档免费下载手册(补充版)
  16. 如何写好项目规划和方案设计文档
  17. OpenCasCade与NURBS——B样条曲线
  18. 了解云桌面,看这一篇文章就够了
  19. Unity实现扇形Slider进度条加载功能
  20. mp3计算机无法识别,MP3\MP4连接windows电脑后无法识别怎么办

热门文章

  1. 单片机I/O控制方式(UART中断和DMA中断的区别)
  2. 学习《Linux设备模型浅析之设备篇》笔记(三)
  3. 实现搜索框记录搜索历史_三个案例告诉你:“搜索框”该如何设计?
  4. hbase 数据插入指定rowkey_「HBase大爆炸」HBase之常用Shell命令
  5. 残差平方和ssr的计算公式为_如何为你的回归问题选择最合适的机器学习方法?...
  6. 占用栅格地图算法的理解
  7. json格式天气数据的获取,jsonp方式获取统计图数据
  8. AutoCAD 2D与3D大师班学习教程 AutoCAD 2D and 3D Masterclass
  9. 分布式一致性(共识)算法(Paxos,raft,ZAB)的一些总结
  10. Elasticsearch 6.3.1、Head插件 安装及配置