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 ...
implementation 'org.opencv:opencv:4.5.2' ``` 并确保已经执行了`sync`操作,让Android Studio下载并集成这个库。 2. **NDK和CMake配置**:OpenCV是一个C++库,因此需要在项目级`build.gradle`文件中配置NDK...
爱分享、爱极客的编程怪兽--DaveBobo 博文 《【OpenCV学习笔记 008】基于形态学运算的图像变换》 博文链接: http://blog.csdn.net/davebobo/article/details/52561463 OpenCV版本:2.4.9
《OpenCV算法精解:基于Python与C》是一本深入探讨计算机视觉库OpenCV的教材,旨在帮助读者理解和掌握OpenCV中的核心算法及其在Python和C++语言中的实现。OpenCV,全称Open Source Computer Vision Library,是一个...
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.
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: ...
代码中利用canny边缘检测绘制并取得工程目录图片下的轮廓,对每个轮廓用直线进行拟合,计算每个轮廓中点到拟合直线的距离。以此来判断一个轮廓的线性程度。包括了霍夫变换检测图像中的直线和累计概率霍夫变换检测...
在本篇内容中,我们将基于提供的标题“C++OpenCV3源代码轮廓查找基础”以及描述:“C++OpenCV3编程源代码轮廓查找基础提取方式是百度网盘分享地址”,来详细探讨C++结合OpenCV进行图像处理时,轮廓检测的基础原理及...
Java OpenCV系列是一个深入探讨如何在Java环境中使用OpenCV库进行图像处理和计算机视觉的教程。OpenCV(开源计算机视觉库)是一个强大的跨平台库,它包含了大量的算法和功能,用于实时图像处理、计算机视觉以及模式...
一、下载CMake和OpenCV库 1.CMake下载地址:https://cmake.org/download/,下载windows版本即可,建议安装v3.16及以上版本 2.下载opencv及opencv-contrib库: https://github.com/opencv/opencv/releases ...
在本文中,我们将深入探讨如何在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: # 绘制圆的边缘 ...
Python与OpenCV:学习如何使用Python与OpenCV进行图像和视频处理。OpenCV基础知识:掌握OpenCV的基本函数和概念,如图像读取、显示、保存、滤波、变换、特征提取等。OpenCV图像处理:学习OpenCV在图像处理方面的应用...