查找轮廓总结
2016-03-28 18:24
204 查看
轮廓到底是什么东西?一个轮廓一般对应一系列的点,也就是图像中的一条曲线,以序列的形式存储,序列的每一个元素是曲线中一个点的位置。
findContours()从二值图像中查找轮廓,图像可以是从canny()函数得到,或者是threshold函数得到。
首先有轮廓树的概念,c代表的是轮廓,h代表的是孔,opencv的findcontours(),可以区分内部和外部边界。
包含的概念在很多应用中都非常重要。(这个以后估计会有所体会的!)
opencv允许得到的轮廓被聚合成一个轮廓树,从而把包含关系编码到树结构中。例如轮廓数的根节点的轮廓叫c0,孔h00和h01是它的子节点。这些轮廓中直接包含的轮廓成为他们的子节点,依次类推。
hierarchy[idx][0]是轮廓树遍历的方式,每个contours[i]中对应了4个hierarchy元素,hierarchy[i][0]~hierarchy[i][3],分别代表后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓。
这个是推酷上看到的一种轮廓遍历的例子,挺能表达轮廓遍历的意思的,还得多用才能熟练掌握轮廓的遍历。
//---------------------------------------------------------------------------------------------------------------------------------------------
//轮廓模式为CV_RETR_CCOMP,第一层为连通域的外围边界,因为我们前景颜色值为255,背景为0
//所以得到的轮廓为外围边界,所以我们只需要第一层,hierarchy[idx][0]表示为下一个轮廓的索引
//如果到达最后一个轮廓,则hierarchy[idx][0]=-1;
for (; idx >= 0; idx = hierarchy[idx][0])
{
const vector<Point>& c = contours[idx];
double area = fabs(contourArea(Mat(c)));
if (area > maxArea)
{
maxArea = area;
largestComp = idx;//找出包含面积最大的轮廓
}
}
findContours()从二值图像中查找轮廓,图像可以是从canny()函数得到,或者是threshold函数得到。
首先有轮廓树的概念,c代表的是轮廓,h代表的是孔,opencv的findcontours(),可以区分内部和外部边界。
包含的概念在很多应用中都非常重要。(这个以后估计会有所体会的!)
opencv允许得到的轮廓被聚合成一个轮廓树,从而把包含关系编码到树结构中。例如轮廓数的根节点的轮廓叫c0,孔h00和h01是它的子节点。这些轮廓中直接包含的轮廓成为他们的子节点,依次类推。
hierarchy[idx][0]是轮廓树遍历的方式,每个contours[i]中对应了4个hierarchy元素,hierarchy[i][0]~hierarchy[i][3],分别代表后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓。
这个是推酷上看到的一种轮廓遍历的例子,挺能表达轮廓遍历的意思的,还得多用才能熟练掌握轮廓的遍历。
//---------------------------------------------------------------------------------------------------------------------------------------------
//轮廓模式为CV_RETR_CCOMP,第一层为连通域的外围边界,因为我们前景颜色值为255,背景为0
//所以得到的轮廓为外围边界,所以我们只需要第一层,hierarchy[idx][0]表示为下一个轮廓的索引
//如果到达最后一个轮廓,则hierarchy[idx][0]=-1;
for (; idx >= 0; idx = hierarchy[idx][0])
{
const vector<Point>& c = contours[idx];
double area = fabs(contourArea(Mat(c)));
if (area > maxArea)
{
maxArea = area;
largestComp = idx;//找出包含面积最大的轮廓
}
}
相关文章推荐
- python中使用OpenCV进行人脸检测的例子
- opencv 做人脸识别 opencv 人脸匹配分析
- 使用opencv拉伸图像扩大分辨率示例
- 基于C++实现kinect+opencv 获取深度及彩色数据
- OpenCV 2.4.3 C++ 平滑处理分析
- Python中使用OpenCV库来进行简单的气象学遥感影像计算
- 利用Python和OpenCV库将URL转换为OpenCV格式的方法
- python结合opencv实现人脸检测与跟踪
- Python环境搭建之OpenCV的步骤方法
- Python实现OpenCV的安装与使用示例
- 在树莓派2或树莓派B+上安装Python和OpenCV的教程
- opencv-python学习一--人脸检测
- 在Ubuntu上安装OpenCV3.0和Python-openCV的经历
- OpenCV配置,从来没有这么简单!
- ubuntu下opencv和qt的安装配置
- OpenCV学习笔记(二十五)——OpenCV图形界面设计Qt+VS2008
- 分享一些OpenCV实现立体视觉的经验
- 关于OpenCv图像变换与基本图形检测
- "应用程序正常初始化失败"-0xc0150002 解决办法
- OpenCV->HSV色彩空间