我目前正在嘗試創建一個程序來查找收據的邊緣,然後相應地裁剪它。我用這個代碼來做到這一點:查找最大的輪廓C++
vector<vector<cv::Point> > contours;
vector<Vec4i> hierarchy;
findContours(edged, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);
sort(contours.begin(), contours.end(), compareContourAreas);
vector<cv::Point> target;
for(int i = 0; i < contours.size(); i++){
vector<cv::Point> c = contours[i];
double p = arcLength(c, true);
vector<cv::Point> approx;
approxPolyDP(c, approx, 0.02*p, true);
if (approx.size() == 4) {
target = approx;
break;
}
}
這段代碼發現輪廓很好,但沒有正確地過濾它們。例如,將在以下圖像
在左邊的圖像表示所有輪廓而圖像向右只是表示目標。我想知道如何更改我的代碼,以便始終收到目標收據的邊緣。
顏色細分圖像並找到輪廓。不需要邊緣。 **矢量最大=輪廓[輪廓。尺寸() - 1] **讓你在排序後滑出。如果需要輪廓外的矩形點,可以使用** boundingRect(輪廓[i])**。 –