如何用OPENCV在图片中找到显著区域

比如说一张图片主体是黑色的,有一部分或几块是白色或其他颜色的区域,现在要用最小的矩形分别把这些区域框出来。请告诉我计算效率高的方法,精准度可以妥协... 比如说一张图片主体是黑色的,有一部分或几块是白色或其他颜色的区域,现在要用最小的矩形分别把这些区域框出来。

请告诉我计算效率高的方法,精准度可以妥协
展开
 我来答
何处淬吴钩
推荐于2016-02-25 · TA获得超过5044个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2406万
展开全部
灰度化、二值化、阈值分割、查找轮廓、外包矩形。
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 广告
表界面分析在材料科学及化学领域占据核心地位,它深入探索物质表面与界面的微观结构、化学组成及相互作用。通过电商平台射线光电子能谱(电商平台PS)、扫描电子显微镜(SEM)及原子力显微镜(AFM)等先进技术手段,我们Dr. O.K. Wack ... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式