opencv-之圆形ROI的提取
跟大家分享一下如何提取圆形的ROI有时候我们必须把感兴趣区域分割出来,然后对其进行独自的分析,这样既可以节约代码的运行时间,又可以减少感兴趣区域周围的干扰。常有的方法是用掩膜提取,我这里也是用的掩膜提取findContours(g_adpsrc,contours,hierarchy,RETR_LIST,CHAIN_APPROX_SIMPLE,Point(0,0));vector<Rect&g
·
跟大家分享一下如何提取圆形的ROI
有时候我们必须把感兴趣区域分割出来,然后对其进行独自的分析,这样既可以节约代码的运行时间,又可以减少感兴趣区域周围的干扰。
常有的方法是用掩膜提取,我这里也是用的掩膜提取
findContours(g_adpsrc,contours,hierarchy,RETR_LIST,CHAIN_APPROX_SIMPLE,Point(0,0));
vector<Rect>box(contours.size());//这里先定义一个矩形向量,把你感兴趣的地方用矩形圈起来
float x,y,len;
for(size_t i=0;i<contours.size();i++)
{
box[i]=boundingRect(Mat(contours[i]));
if(box[i].height=box[i].width)
{
float area=contourArea(Mat(contours[i]));//这里不会识别很多矩形,我这里是用了面积筛选,来找到我想要的图形
if(area>2500)
{ /*rectangle(src,box[i].tl(),box[i].br(),Scalar(0,0,255),1,8);这里可以先查看是否是你先要的区域*/
x=box[i].tl().x+box[i].width/2;
y=box[i].tl().y+box[i].height/2;
len=box[i].height/2;
}
}
}
Mat mask=Mat::zeros(src.size(),CV_8UC1);//这里定义一个掩膜,尺寸与原图的尺寸一定要一致,单通道的
circle(mask,Point(x,y),len,Scalar(255),-1,8);//这里是在刚才的掩膜上画一个圆,圆形就是刚才你找到的图形的圆心,半径可以根据形况分析出来,颜色是纯黑色,
Mat masksrc;//定义一个空模板
src.copyTo(masksrc,mask);//掩膜提取
imshow("draw",masksrc);//提取成功
上面的代码时我的一部分,我把重点的掩膜提取过程摘了下来,然后把我自己的理解旁注在了代码后面。
简单的解释就是在你矩形掩膜的模板上画一个你要提取的圆,就这么简单。
能力有限,如果有什么疑问可以随时交流。
更多推荐
所有评论(0)