这是我第一次使用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并获取第一个元素。