(完全编辑问题,因为我正在尝试不同的方法)
我试图找到可以部分遮挡的普通纸张的角落。 我现在使用houghlines来获取线条,然后计算它们的交叉点,这种方法很稳健,即使纸张被部分遮挡也能提供良好的结果。
问题:
1)有很多交叉点非常接近,我如何快速合并它们,因为我实时显示结果。
2)由于在纸张外部可能检测到一些点(由于某些其他物体的某些噪声),我如何从交叉点获得多边形。
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));
}