如何用OPENCV在图片中找到显著区域
比如说一张图片主体是黑色的,有一部分或几块是白色或其他颜色的区域,现在要用最小的矩形分别把这些区域框出来。请告诉我计算效率高的方法,精准度可以妥协...
比如说一张图片主体是黑色的,有一部分或几块是白色或其他颜色的区域,现在要用最小的矩形分别把这些区域框出来。
请告诉我计算效率高的方法,精准度可以妥协 展开
请告诉我计算效率高的方法,精准度可以妥协 展开
1个回答
展开全部
灰度化、二值化、阈值分割、查找轮廓、外包矩形。
opencv里有现成的轮廓例子,在轮廓基础上做外包矩形即可(外包矩形函数是cv::boundingRect,opencv2以后的版本)
opencv里有现成的轮廓例子,在轮廓基础上做外包矩形即可(外包矩形函数是cv::boundingRect,opencv2以后的版本)
追问
boundingRect是先找到轮廓再得到矩形的,但是操作都是使用IplImage这样老式的数据风格。
有没有使用Mat的版本
追答
你这纯属抬杠,我都用了很久了。给你一段我不久前的代码片段自己提取有关信息吧
vector > contours;
vector hierarchy;
vector > contours0;
Mat im;
cv::cvtColor(g_Mat,im,CV_RGB2GRAY);
cv::threshold(im,im,125,255,CV_THRESH_BINARY);
Mat canny_output;
int thresh = 100;
cv::Rect rec,rec1;
int m;
Canny( im, canny_output, thresh, thresh*3);//, 3 );
findContours( canny_output, contours0, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cv::Point(0, 0) );
for( size_t k = 0; k 0)//为内轮廓
{
approxPolyDP(Mat(contours0[k]), contours[m], 3, true);
m++;
}
}
drawContours( g_Mat, contours,-1, Scalar(0,255,0),3, CV_AA);
if(contours.size() == 0)
return;
rec = cv::boundingRect(contours[0]);
for(size_t k = 1;krec.area())
rec = rec1;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询