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对象,里面包含了围线的点
可以用上面的方法将点取出,然后画出来
前几天搞定了在iphone中使用opencv,感觉真不错!开始不顺利,自己又不想编译太麻烦了,
妄想着能用opencv的源代码,但是文件太多,链接时编译器居然不响应了。 要用到头文
件和链接库,在xcode中设置好就行,注意设置两个lib文件的链接时要加
-lstdc++ -lz 。这是我一朋友在国外网站上找来的,他不能运行,到我电脑上却可以运行,然后我总结了一下,发布在这
分享到:
相关推荐
Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library 是一本由浅入深介绍Opencv3 计算机视觉库使用的专业书籍。书中详细介绍了opencv3安装及各个模块的使用,此书在旧版基本上做了大量修改,以适应...
Java Opencv系列:(配套代码下载)Java Opencv系列:(配套代码下载)
Duanxx的OpenCV学习:视频操作
Duanxx的OpenCV学习:filter2D使用说明
Duanxx的OpenCV学习:设置窗口位置
https://www.pyimagesearch.com/2018/07/19/opencv-tutorial-a-guide-to-learn-opencv/ 代码
OpenCV初探:二、Android程序示例 源代码 有兴趣同学可以下来跑一下
OpenCV初探:一、windows桌面程序示例源代码 有兴趣的同学可以下下来跑跑看。
之前上传的只能在armeabi上使用,这次补充了x86等架构的兼容。最新OpenCV官方SDK里面缺少的一个库,但是这个库非常重要。不然会影响到免安装OpenCV Manager
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 008】基于形态学运算的图像变换》 博文链接: http://blog.csdn.net/davebobo/article/details/52561463 OpenCV版本:2.4.9
刘瑞祯, 于仕琪编著的《OpenCV教程:基础篇》的实例源代码,很全,很好用,相信给大家很大帮助
October, 2020 The fall update of OpenCV has been released!... Starting from OpenCV 4.5.0, all the future OpenCV 4.x and OpenCV 5.x releases will be distributed under Apache 2 license.
代码中利用canny边缘检测绘制并取得工程目录图片下的轮廓,对每个轮廓用直线进行拟合,计算每个轮廓中点到拟合直线的距离。以此来判断一个轮廓的线性程度。包括了霍夫变换检测图像中的直线和累计概率霍夫变换检测...
OpenCV笔记
通过openCV从摄像头图像中查找圆形物体,并在所找到的圆形物体上画出圆形轮廓
this program show us a brief code for imageshowing under opencv
一、下载CMake和OpenCV库 1.CMake下载地址:https://cmake.org/download/,下载windows版本即可,建议安装v3.16及以上版本 2.下载opencv及opencv-contrib库: https://github.com/opencv/opencv/releases ...
OpenCV算法精解:基于Python与C(优秀教材,值得一看),需要请自行下载