如何从上到下排序轮廓:Opencv,Android

时间:2015-04-22 21:07:06

标签: java android sorting opencv contour

我找到了轮廓,但问题是findcontours()以随机顺序返回轮廓,就像轮廓(0)一样,它从页面中间显示一些轮廓。我怎样才能垂直排序?从上到下,然后从左到右?鉴于下面的图像,我水平连接组件并将每个MCQ连接到他们的选择,然后应用findcontours(),现在我想按照顺序检索它们的顺序对它们进行排序

enter image description here

2 个答案:

答案 0 :(得分:1)

我遇到同样的问题并使用java的排序方法。

//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;
        }
    });

答案 1 :(得分:0)

你有boundingRect函数:通过它你可以找到点周围的边界矩形的topleft点。然后,您可以定义一个排序函数,该函数根据每个轮廓的该点的位置对轮廓进行排序。