Мне нужно извлечь самый большой контур изображения. Это код, который я использую в настоящее время. собрано из нескольких фрагментов онлайнAndroid OpenCV Найти контуры
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Imgproc.findContours(outerBox, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_SIMPLE);
double maxArea = -1;
int maxAreaIdx = -1;
for (int idx = 0; idx < contours.size(); idx++) {
Mat contour = contours.get(idx);
double contourarea = Imgproc.contourArea(contour);
if (contourarea > maxArea) {
maxArea = contourarea;
maxAreaIdx = idx;
}
}
и кажется, что работает. однако, я не совсем уверен, как идти отсюда. Я пробовал использовать Imgproc.floodFill
, но я не совсем уверен, как это сделать. для этой функции требуется мачта Mat
того же размера, что и оригинал Mat
+2 по горизонтали и +2 по вертикали. Когда я запустил это на контуре contours.get(maxAreaIdx)
, это дало мне ошибку. Код:
Mat mask = Mat.zeros(contour.rows() + 2, contour.cols() + 2, CvType.CV_8UC1);
int area = Imgproc.floodFill(contour, mask, new Point(0,0), new Scalar(255, 255, 255));
Ошибка:
11-18 19:07:49.406: E/cv::error()(3117): OpenCV Error: Unsupported format or combination of formats() in void cvFloodFill(CvArr*, CvPoint, CvScalar, CvScalar, CvScalar, CvConnectedComp*, int, CvArr*), file /home/oleg/sources/opencv/modules/imgproc/src/floodfill.cpp, line 621
Так в основном мой вопрос, как я могу, после того, как найти контур с самой большой площадью, на «изюминку» это? Я хочу, чтобы все остальное было черным, а контур был белым
Спасибо!
Можете ли вы обеспечить реализацию на Java? Я не могу найти его ... – Marek
@Marek Вы получили реализацию Java? –
В примере выбора цвета-blob присутствует пример java/opencv4android findContours. – Mytheral