在opencv中分别检测两个相交的矩形

时间:2016-08-17 07:07:53

标签: opencv shape detection

我可以检测到彼此分开的矩形。但是,我遇到了接触矩形的问题,如下所示:

Two rectangles in contact

我应该在图像中检测到2个矩形。我正在按预期使用findContours,我尝试了各种模式:CV_RETR_TREE,CV_RETR_LIST。我总是得到最外面的单个轮廓,如下所示:

Outermost contour detected

我尝试过使用或不使用canny边缘检测。我的工作如下:

cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(3,3));
cv::erode(__mat,__mat, element);
cv::dilate(__mat,__mat, element);

// Find contours
std::vector<std::vector<cv::Point> > contours;
cv::Mat coloredMat;
cv::cvtColor(__mat, coloredMat, cv::COLOR_GRAY2BGR);
int thresh = 100;
cv::Mat canny_output;
cv::Canny( __mat, canny_output, thresh, thresh*2, 3 );

cv::findContours(canny_output, contours, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

如何分别检测两个矩形?

1 个答案:

答案 0 :(得分:0)

如果您已经知道矩形的尺寸,可以使用generalizedHoughTransform

如果未知矩形的尺寸,您可以使用distanceTransform。局部最大值将为您提供中心位置以及从中心到最近边缘的距离(这将等于矩形短边的一半)。使用角点检测/分水岭进行进一步处理,您应该能够找到方向和尺寸(尽管如果两个矩形相互重叠,这种方法可能会失败)

简单的角点检测和强力搜索(只需尝试所有可能的矩形组合,给定角点并查看哪一个最匹配图像,请注意,只有3个点可以定义矩形)也可以使用