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)));
    }
Другие вопросы по тегам