【发布时间】:2019-08-15 16:36:03
【问题描述】:
如何从黑色背景的图像中提取所有矩形轮廓?
我想得到底部的黑色矩形(里面有一些白色文字)
在代码中,我尝试通过cv::RETR_EXTERNAL 获取具有4 个角的所有轮廓,但它仅将整个图像获取为一个大轮廓?我做错了什么?
std::vector<std::vector<cv::Point>> contours;
std::vector<cv::Vec4i> hierarchy;
cv::findContours(img, contours, hierarchy, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
cv::cvtColor(img, img, cv::COLOR_GRAY2BGR);
for(int i = 0; i < contours.size(); i++){
std::cout << "contour found" << std::endl;
std::vector<cv::Point> approx;
cv::approxPolyDP(contours[i], approx, cv::arcLength(contours[i], true) * 0.02, true);
if(!cv::isContourConvex(approx)){
continue;
}
if(approx.size() == 4){
cv::rectangle(img, cv::boundingRect(contours[i]), cv::Scalar(0, 255, 0), 2);
}
}
cv::imwrite("img.png", img);
【问题讨论】:
-
如果你的图像总是这样,那么你可以通过计算黑色和非黑色像素的比率来过滤掉轮廓。还将 findcontours 函数限制为图像的下半部分或下 1/3,以获得更快的结果。
-
图片总是不同的,所以你不能这样做:)
-
您过去曾问过其中几个问题,而 IMO 您并不真正关心如何通过讨论一些似是而非的结果或帮助回答/评论您的问题的人来获得结果,但是只是最终的结果。如果不重新评估您以前得到的答案,我真的不认为一次又一次地提出相同的问题有什么意义
-
@RickM。我没有足够的 opencv(或 C++)经验,无法将一些代码从简单的描述和理论中组合起来
-
如果我需要一些帮助来将一些代码放在一起,我只会得到我必须自己做的回应......我不能......