Я хочу нарисовать самый большой контур, обнаруженный Imgproc.findContours в моем приложении для Android.Кажется, что Imgproc.findContours находит несколько контуров, но код падает при попытке выполнить функцию Imgproc.drawContours.
Вот код Java:
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat hierarchy = new Mat();
Imgproc.findContours(result, contours, hierarchy, Imgproc.RETR_FLOODFILL, Imgproc.CHAIN_APPROX_SIMPLE);
largest_area = 0;
largest_contour_index = -1;
for(int i = 0; i<contours.size(); i++){
double area = Imgproc.contourArea(contours.get(i));
if(area > largest_area){
largest_area = area;
largest_contour_index = i;
}
}
Mat contourDrawing = Mat.zeros(result.rows(), result.cols(), CvType.CV_8UC3);
Log.d("contours.size()", Integer.toString(contours.size()));
Log.d("largest_area", Double.toString(largest_area));
Log.d("largest_contour_index", Integer.toString(largest_contour_index));
Imgproc.drawContours(contourDrawing, contours, largest_contour_index, new Scalar(255, 0, 0), 2);
Вывод Logcat выглядит следующим образом, показывающий, что контуры обнаружены:
D / contours.size (): 1901
D / large_area: 343974.0
D / large_contour_index: 825
Но когда дело доходит до рисования контура с помощью Imgproc.drawContours, приложение вылетает.Я использую OpenCV версии 3.4.3.Кто-нибудь знает, что здесь может быть не так?Большое спасибо!
Вот журнал ошибок:
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xb930b93 in tid 30396 (Thread-2), pid 30213
/lib/arm64/libopencv_java3.so (cv::drawContours(cv::_InputOutputArray const&, cv::_InputArray const&, int, cv::Scalar_<double> const&, int, int, cv::_InputArray const&, int, cv::Point_<int>)+2124)
/lib/arm64/libopencv_java3.so (Java_org_opencv_imgproc_Imgproc_drawContours_11+252)
/dev/ashmem/dalvik-classes.dex extracted in memory from ==/base.apk (deleted) (org.opencv.imgproc.Imgproc.drawContours+102)