0
我試圖使用the following算法通過minAreaRect
返回的結果進行排序:OpenCV的排序分
這裏是我的代碼現在:
void sortPoints(Point2f* unsorted) {
Point2f sorted[4];
for (int i = 0; i < 4; i++) sorted[i] = Point(0, 0);
float middleX = (unsorted[0].x + unsorted[1].x + unsorted[2].x + unsorted[3].x)/4;
float middleY = (unsorted[0].y + unsorted[1].y + unsorted[2].y + unsorted[3].y)/4;
for (int i = 0; i < 4; i++) {
if (unsorted[i].x < middleX && unsorted[i].y < middleY) sorted[0] = unsorted[i];
if (unsorted[i].x > middleX && unsorted[i].y < middleY) sorted[1] = unsorted[i];
if (unsorted[i].x < middleX && unsorted[i].y > middleY) sorted[2] = unsorted[i];
if (unsorted[i].x > middleX && unsorted[i].y > middleY) sorted[3] = unsorted[i];
}
unsorted = sorted;
}
...
vector<RotatedRect> minRect(contours.size());
for(int i = 0; i < contours.size(); i++) {
minRect[i] = minAreaRect(Mat(contours[i]));
}
Point2f rect_points[4];
for(int i = 0; i < contours.size(); i++) {
minRect[i].points(rect_points);
sortPoints(rect_points); /* ...they are not sorted after calling sortPoints?!? */
}
但它不工作,沒有編譯錯誤,但點不排序。我認爲數據類型有問題。
我不認爲這個算法排序您的數據! – Tempux
我更新了我的問題,在那裏你可以看到原來的算法。 – vitozev