我想用opencv提取外矩形,结果提取了画布外轮廓。

cvFindContours(bw,storage,&contour,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX... cvFindContours(bw,storage,&contour,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE);
我要提取大圆的外接矩,可是结果提了个画框~。
展开
轻一鸿
2012-02-08 · TA获得超过141个赞
知道小有建树答主
回答量:118
采纳率:0%
帮助的人:128万
展开全部
你可以统计外轮廓上点的坐标啊,然后找出左上角和右下角的点,外接矩就出来了。我把我的代码给你贴出来,不明白了再追问我。

CvPoint temp_point;
//初始化角点的坐标,左上角为(0,0),右下角为(height,weight)
int roi_x0 = image->height;
int roi_y0 = image->width;
int roi_x1 = 0;
int roi_y1 = 0;

//遍历轮廓roi_contour上的所有点,并找出左上角和右下角的点
for(int k = 0; k < roi_contour->total; k ++)
{
temp_point = (CvPoint*) cvGetSeqElem(roi_contour, k);
if(temp_point->x < roi_x0)
{
roi_x0 = temp_point->x;
}
if(temp_point->y < roi_y0)
{
roi_y0 = temp_point->y;
}
if(temp_point->x > roi_x1)
{
roi_x1 = temp_point->x;
}
if(temp_point->y > roi_y1)
{
roi_y1 = temp_point->y;
}

}
CvRect roi_rect;//外接矩
roi_rect.x = roi_x0 ;
roi_rect.y = roi_y0 ;
roi_rect.height = (roi_y1 - roi_y0);
roi_rect.width = (roi_x1 - roi_x0);

cout<<roi_rect.x<<","<<roi_rect.y<<endl;
cout<<roi_rect.height<<","<<roi_rect.width<<endl;

cvRectangle(dst_image,cvPoint(roi_rect.x,roi_rect.y),cvPoint((roi_rect.x+roi_rect.width),(roi_rect.y+roi_rect.height)),CV_RGB(255,255,255),1);//这个语句是画出矩形
hydranjc
2012-02-16
知道答主
回答量:31
采纳率:0%
帮助的人:6.9万
展开全部
cvMinAreaRect2( const CvArr* points, CvMemStorage* storage CV_DEFAULT(NULL));
轮廓的最小外接矩形
http://blog.csdn.net/z397164725/article/details/7248096
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友699d1dc
2012-02-09 · TA获得超过194个赞
知道小有建树答主
回答量:113
采纳率:0%
帮助的人:133万
展开全部
CV_RETR_EXTERNAL就是只检测外轮廓的意思。,你要提取的是哪个矩形你标出来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式