
我想用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);
我要提取大圆的外接矩,可是结果提了个画框~。 展开
我要提取大圆的外接矩,可是结果提了个画框~。 展开
展开全部
你可以统计外轮廓上点的坐标啊,然后找出左上角和右下角的点,外接矩就出来了。我把我的代码给你贴出来,不明白了再追问我。
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);//这个语句是画出矩形
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);//这个语句是画出矩形
展开全部
cvMinAreaRect2( const CvArr* points, CvMemStorage* storage CV_DEFAULT(NULL));
轮廓的最小外接矩形
http://blog.csdn.net/z397164725/article/details/7248096
轮廓的最小外接矩形
http://blog.csdn.net/z397164725/article/details/7248096
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CV_RETR_EXTERNAL就是只检测外轮廓的意思。,你要提取的是哪个矩形你标出来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询