Android Java OpenCV 2,4 выпуклая оболочка выпуклая дефект
Open-CV 2.4 Android-Java:
Я искал контуры (список MatofPoint), как это:
Imgproc.findContours(roi_mat, contours, hierarchy, cfg.retMode, cfg.apxMode);
а затем выпуклая оболочка (должен быть список MatofInt)
for (int k=0; k < contours.size(); k++){
Imgproc.convexHull(contours.get(k), hull.get(k));
}
Выпуклая оболочка хочет MatofInt, но drawcontours хочет MatofPoint.. Так что делать?
Спасибо заранее..
Редактировать: @OpenCV4Android
for (int k=0; k < contours.size(); k++){
Imgproc.convexHull(contours.get(k), hullInt);
for(int j=0; j < hullInt.toList().size(); j++){
hullPointList.add(contours.get(k).toList().get(hullInt.toList().get(j)));
}
hullPointMat.fromList(hullPointList);
hullPoints.add(hullPointMat);
}
Imgproc.drawContours( mROI, hullPoints, -1, new Scalar(255,0,0, 255), 1);
2 ответа
Решение
Похоже, что в Java-интерфейсе OpenCV отсутствует другая подпись выпуклого типа ():
convexHull(MatOfPoint points, MatOfPoint hull);
как можно позвонить в C++.
Пока мы его не добавили, вам нужно создать оболочку в формате MatOfPoint вручную:
- использование
MatOfPoint::toArray()
или жеMatOfPoint::toList()
получить точки контура - использование
MatOfInt::toArray()
или жеMatOfInt::toList()
чтобы получить их индексы для корпуса - создать новый
Point[]
или жеList<Point>
только с точками корпуса - преобразовать его в
MatOfPoint
с помощьюMatOfPoint::fromArray()
или жеMatOfPoint::fromList()
- вызов
Core.drawContours()
Нам нужно очистить hullPointList перед добавлением точки списка для контура
hullPointList .clear();
for(int j=0; j < hullInt.toList().size(); j++){
hullPointList.add(contours.get(k).toList().get(hullInt.toList().get(j)));
}