OpenCV在Java中按区域排序轮廓

时间:2016-11-18 04:59:39

标签: java opencv

这是我第一次使用OpenCV,我无法找到按区域对轮廓进行排序的方法。我正在寻找两个最大的领域。目前我有:

 List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
 Imgproc.findContours(MatOut, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);

2 个答案:

答案 0 :(得分:1)

对于Java 8 +

//finding max area
Optional<MatOfPoint> largest = contours.stream().max(new Comparator<MatOfPoint>() {
        public int compare(MatOfPoint c1, MatOfPoint c2) {          
            return (int) (Imgproc.contourArea(c1)- Imgproc.contourArea(c2));
        }
    });
// sorting 
contours.sort(new Comparator<MatOfPoint>() {
        public int compare(MatOfPoint c1, MatOfPoint c2) {          
            return (int) (Imgproc.contourArea(c1)- Imgproc.contourArea(c2));
        }
    });

对于Java 7,请使用具有相同比较器的Collections.sort并获取第一个元素。

答案 1 :(得分:0)

一旦我理解它是如何工作的,相对简单,只需使用contourArea作为关键点应用排序方法。