这是我第一次使用OpenCV,我无法找到按区域对轮廓进行排序的方法。我正在寻找两个最大的领域。目前我有:
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(MatOut, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
答案 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
作为关键点应用排序方法。