OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 3309|回复: 2

求助关于轮廓提取级数的问题

[复制链接]
发表于 2014-5-18 23:24:25 | 显示全部楼层 |阅读模式
我的问题程序如下
    int mode = CV_RETR_TREE;//设置提取轮廓模式  
    int contours_num=0;//提取轮廓的数目  
    CvScalar external_color;//绘制轮廓线的颜色  
    CvScalar hole_color;  
    CvMemStorage *storage1 = cvCreateMemStorage(0);  
    CvSeq *contours =0;//存储提取的轮廓图像  
IplImage *imgotl = cvCreateImage(cvGetSize(img2),8,1);//显示提取的轮廓图像
cvZero(imgotl);
contours_num=cvFindContours(img2,storage1,&contours,sizeof(CvContour),mode,CV_CHAIN_APPROX_NONE);
for (;contours!=0;contours=contours->h_next)  
{  
    hole_color=CV_RGB(rand()&255,rand()&255,rand()&255);  
    external_color = CV_RGB(rand()&255,rand()&255,rand()&255);  
    cvDrawContours(imgotl,contours,external_color,hole_color,1,2,8,cvPoint(0, 0));  
}   
cvNamedWindow("otl",0);
    cvShowImage("otl",imgotl);
cvReleaseMemStorage(&storage1);
cvWaitKey();
}
此段程序前进行了中值滤波和二值化。
我要提取最外层的轮廓,用的模式是CV_RETR_TREE(其他模式不能单独显示最外层轮廓),可是绘制轮廓的时候如果参数max_level选1的话显示出来一片黑,选2的话才是最外层轮廓,选6时出现全部内外轮廓,中间的取值没试过,而网上说的是选1出现第一级轮廓即最外层。这里我选择max_level=2,然后下一步引用contours点集绘制最小外接圆的函数cvMinEnclosingCircle(这里没有列出),这时程序报错assertion failed<arr!=0&&contour_header!=0&&block!=0>in cvpointseqfrommat,file.........utils.cpp。我想可能是contours没有指向最外层所以cvMinEnclosingCircle没有读取到最外层的点集,不知道该怎么样解决这个问题。

max_level=2

max_level=2

max_level=6

max_level=6
回复

使用道具 举报

 楼主| 发表于 2014-5-19 01:23:49 | 显示全部楼层
如果去掉for (;contours!=0;contours=contours->h_next)直接绘制轮廓不会出现问题,这是为什么?  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-19 01:26:25 | 显示全部楼层
但是接下来求外接圆发现有返回圆心和半径但是画圆没有显示
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-2 12:28 , Processed in 0.010468 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表