我已经找到了轮廓,但是问题是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;
        }
    });

10-07 12:22