我有以下代码:
findContours( src, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );
Mat drawing = Mat::zeros( src.size(), CV_8UC3 );
double largest_area = 0;
for( int i = 0; i < contours.size(); i++) { // get the largest contour
area = fabs( contourArea( contours[i] ) );
if( area >= largest_area ){
largest_area = area;
largest_contours.clear();
largest_contours.push_back( contours[i] );
}
}
if( largest_area >= 3000 ){ // draw the largest contour if exceeded minimum largest area
drawContours( drawing, largest_contours, -1, Scalar(0,0,255), 2 );
}
...产生以下输出图像:
我想获得四个点的坐标(标有绿色),这可能吗?
答案 0 :(得分:1)
你是否试图在透视中找到矩形的角落?
您可能想尝试多种解决方案:
HoughLines
进行线路检测并找到它们的交叉点。对于类似的任务我使用了以下程序(在我的情况下它工作正常):
使用增加的epsilon参数对输入轮廓执行cv::approxPolyDP
,直到它返回4条或更少的折线。如果它返回4条折线,你可以得到4个角点,完全符合你的要求。如果它返回少于4个折线,则可能出现问题。