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安装及各个模块的使用,此书在旧版基本上做了大量修改,以适应...
4. **形状检测**:例如轮廓检测,可以找到图像中的特定形状。 ### 四、特征检测与匹配 OpenCV提供了多种特征检测算法,如SIFT(尺度不变特征变换)、SURF(加速稳健特征)和ORB(Oriented FAST and Rotated BRIEF...
OpenCV 实践:面部检测与图像处理技术
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,包含了众多图像处理和计算机视觉的算法,广泛应用于图像分析、识别、机器学习等领域。在Android平台上,OpenCV的使用通常需要通过OpenCV ...
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 008】基于形态学运算的图像变换》 博文链接: http://blog.csdn.net/davebobo/article/details/52561463 OpenCV版本:2.4.9
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边缘检测绘制并取得工程目录图片下的轮廓,对每个轮廓用直线进行拟合,计算每个轮廓中点到拟合直线的距离。以此来判断一个轮廓的线性程度。包括了霍夫变换检测图像中的直线和累计概率霍夫变换检测...
在本篇内容中,我们将基于提供的标题“C++OpenCV3源代码轮廓查找基础”以及描述:“C++OpenCV3编程源代码轮廓查找基础提取方式是百度网盘分享地址”,来详细探讨C++结合OpenCV进行图像处理时,轮廓检测的基础原理及...
OpenCV: Open Source Computer Vision Library https://github.com/opencv/opencv Homepage: https://opencv.org Courses: https://opencv.org/courses Docs: https://docs.opencv.org/4.x/ Q&A forum: ...
一、下载CMake和OpenCV库 1.CMake下载地址:https://cmake.org/download/,下载windows版本即可,建议安装v3.16及以上版本 2.下载opencv及opencv-contrib库: https://github.com/opencv/opencv/releases ...
Java OpenCV系列是一个深入探讨如何在Java环境中使用OpenCV库进行图像处理和计算机视觉的教程。OpenCV(开源计算机视觉库)是一个强大的跨平台库,它包含了大量的算法和功能,用于实时图像处理、计算机视觉以及模式...
在本文中,我们将深入探讨如何在QT5.8环境下结合OpenCV3.2库实现图像处理中的关键步骤:边缘检测、轮廓提取以及轮廓跟踪。这些技术在计算机视觉、机器学习和自动化领域中扮演着重要角色。 首先,让我们来了解边缘...
### 基于OpenCV的车辆轮廓检测 #### 摘要 本文介绍了一种新型的基于开源计算机视觉库OpenCV的车辆轮廓检测方法。针对传统汽车尺寸参数测量手段相对落后的现状,本文提出了一种结合图像处理技术和计算机视觉算法的...
this program show us a brief code for imageshowing under opencv
**步骤五:绘制圆形轮廓** 如果找到圆形,我们可以将其在原始图像上标出。 ```python if circles is not None: circles = np.round(circles[0, :]).astype("int") for (x, y, r) in circles: # 绘制圆的边缘 ...
在OpenCV库中,活动轮廓模型被实现为一种强大的工具,可以帮助开发者处理各种图像分析任务。 OpenCV3是OpenCV的一个重要版本,它在前一版本的基础上进行了很多优化和增强,提供了更多的功能和更高的性能。在OpenCV3...
Python与OpenCV:学习如何使用Python与OpenCV进行图像和视频处理。OpenCV基础知识:掌握OpenCV的基本函数和概念,如图像读取、显示、保存、滤波、变换、特征提取等。OpenCV图像处理:学习OpenCV在图像处理方面的应用...
最新的OpenCV资源 OpenCV 2 Computer Vision Application Programming Cookbook