如何用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;
}
ZESTRON
2024-09-04 广告
2024-09-04 广告
表界面分析在材料科学及化学领域占据核心地位,它深入探索物质表面与界面的微观结构、化学组成及相互作用。通过电商平台射线光电子能谱(电商平台PS)、扫描电子显微镜(SEM)及原子力显微镜(AFM)等先进技术手段,我们Dr. O.K. Wack ...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询