这是我第一次使用OpenCV,在寻找一种方法来按区域对轮廓进行排序时遇到了麻烦。我正在寻找两个最大的 Realm 。目前我有:

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

最佳答案

对于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并获取第一个元素。

10-08 07:54