我已经找到了轮廓,但是问题是findcontours()以随机顺序返回轮廓,就像轮廓(0)一样,它从页面中间显示了一些Sontour。如何垂直分类?从上到下然后从左到右?给定下图,我将组件水平连接,并将每个MCQ与它们的选择连接起来,然后应用findcontours(),现在我想按顺序对其进行排序,以使它们顺序地被检索。
最佳答案
我有同样的问题,并使用java的sort方法。
//sort by y coordinates using the topleft point of every contour's bounding box
Collections.sort(contourList, new Comparator<MatOfPoint>() {
@Override
public int compare(MatOfPoint o1, MatOfPoint o2) {
Rect rect1 = Imgproc.boundingRect(o1);
Rect rect2 = Imgproc.boundingRect(o2);
int result = Double.compare(rect1.tl().y, rect2.tl().y);
return result;
}
} );
//sort by x coordinates
Collections.sort(contourList, new Comparator<MatOfPoint>() {
@Override
public int compare(MatOfPoint o1, MatOfPoint o2) {
Rect rect1 = Imgproc.boundingRect(o1);
Rect rect2 = Imgproc.boundingRect(o2);
int result = 0;
double total = rect1.tl().y/rect2.tl().y;
if (total>=0.9 && total<=1.4 ){
result = Double.compare(rect1.tl().x, rect2.tl().x);
}
return result;
}
});