opencv-之圆形ROI的提取

跟大家分享一下如何提取圆形的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);//提取成功

上面的代码时我的一部分,我把重点的掩膜提取过程摘了下来,然后把我自己的理解旁注在了代码后面。
简单的解释就是在你矩形掩膜的模板上画一个你要提取的圆,就这么简单。
能力有限,如果有什么疑问可以随时交流。

你可能感兴趣的:(opencv学习笔记)