部分可见的矩形检测opencv

时间:2016-07-27 14:16:12

标签: opencv detection

完全编辑问题,因为我正在尝试不同的方法

我试图找到可以部分遮挡的普通纸张的角落。 我现在使用houghlines来获取线条,然后计算它们的交叉点,这种方法很稳健,即使纸张被部分遮挡也能提供良好的结果。

问题:

1)有很多交叉点非常接近,我如何快速合并它们,因为我实时显示结果。

2)由于在纸张外部可能检测到一些点(由于某些其他物体的某些噪声),我如何从交叉点获得多边形。

enter image description here

enter image description here

GaussianBlur(grayscaleMat, grayscaleMat, cvSize(11,11), 0);//change from median blur to gaussian for more accuracy of square detection

cv::Canny(grayscaleMat, grayscaleMat, 50, 150, 3);

cv::Mat color;
cv::cvtColor(grayscaleMat, color, cv::COLOR_GRAY2BGR);

vector<cv::Vec2f> lines;
HoughLines(grayscaleMat, lines, 1, CV_PI/180, 50, 0, 0 );

if(lines.size() == 0) {
    return image;
}
////////////////////////////////////
// Start geometery
//merge close lines
std::vector<cv::Vec2f> linesMerged = [ATOpenCVGeometery mergeCloseLines:lines];

//find intersections
std::vector<cv::Point2f> points = [ATOpenCVGeometery intersectionsBetweenLines:linesMerged];


for(int i = 0;i < linesMerged.size();i++) {
    [self drawLine:image vec2f:linesMerged[i] color:cv::Scalar(0,0,255)];
}

for(int i = 0;i < points.size();i++) {
    cv::circle(image, points[i], 4, cv::Scalar(255,0,0));
}

0 个答案:

没有答案