Я пытаюсь нарисовать выпуклый корпус на изображении. Для этого я нахожу все контуры и выбираю контур максимальной площади. drawContours
принимает MatOfPoint
, но convexHull
дает мне MatOfInt
. Я прочитал это question и запустил некоторые коды. Некоторые из них рисуют выпуклый корпус, но они не могут найти действительно выпуклых точек.Нарисовать выпуклый корпус на android
Я использую ниже код, но на последней строке m.fromArray(hullpoints.get(i));
. hullpoints.get(i)
имеет только одну точку и код не может создать объект MatOfPoint
. Как я могу конвертировать в MatOfPoint
от MatOfInt
?
// Find the convex hull
List<MatOfInt> hull = new ArrayList<MatOfInt>();
for(int j=0; j < contours.size(); j++){
hull.add(new MatOfInt());
}
for(int j=0; j < contours.size(); j++){
Imgproc.convexHull(contours.get(j), hull.get(j));
}
// Convert MatOfInt to MatOfPoint for drawing convex hull
// Loop over all contours
List<Point[]> hullpoints = new ArrayList<Point[]>();
for(int j=0; j < hull.size(); j++){
Point[] points = new Point[hull.get(j).rows()];
// Loop over all points that need to be hulled in current contour
for(int k=0; k < hull.get(j).rows(); k++){
int index2 = (int)hull.get(j).get(k, 0)[0];
points[k] = new Point(contours.get(j).get(index2, 0)[0], contours.get(j).get(index2, 0)[1]);
}
hullpoints.add(points);
}
// Convert Point arrays into MatOfPoint
List<MatOfPoint> hullmop = new ArrayList<MatOfPoint>();
for(int j=0; j < hullpoints.size(); j++){
MatOfPoint m = new MatOfPoint();
m.fromArray(hullpoints.get(i));
hullmop.add(m);
}
для моей ошибки индекса. Я не удаляю этот вопрос, чтобы руководить рисованием выпуклого корпуса в приложении Android. Замените 'hullpoints.get (i)' 'hullpoints.get (j)' – zumma
Каковы типы классов 'contours' и' hull'? Что такое 'Imgproc'? –