2012-06-09 15 views
7

Open-CV 2.4 Android Java:android java OpenCV 2.4 otoczka wypukła convexdefect

Szukałem na konturach (lista z MatofPoint), tak jak to:

Imgproc.findContours(roi_mat, contours, hierarchy, cfg.retMode, cfg.apxMode); 

a potem otoczka wypukła (ma się lista MatofInt)

for (int k=0; k < contours.size(); k++){ 

    Imgproc.convexHull(contours.get(k), hull.get(k)); 
} 

otoczka wypukła chce MatofInt ale th e drawcontours chce MatofPoint. Więc co robić?

Thx z góry ..


Edit: @ 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); 

Odpowiedz

4

Wygląda OpenCV Java API brakuje innego otoczka wypukła() Podpis:

convexHull(MatOfPoint points, MatOfPoint hull); 

jak można wywoływać w C++.

Chociaż jej nie dodaje, trzeba stworzyć kadłub w MatOfPoint Format ręcznie:

  • korzystanie MatOfPoint::toArray() lub MatOfPoint::toList() dostać punktów konturu za
  • użycie MatOfInt::toArray() lub MatOfInt::toList() dostać ich indeksy dla kadłuba
  • tworzą nowy Point[] lub List<Point> z punktami kadłuba tylko
  • przekształcić go MatOfPoint poprzez MatOfPoint::fromArray() lub MatOfPoint::fromList()
  • rozmowy Core.drawContours()
+0

ok thx. Spróbuję tego i dam ci znać .. – ddd

+0

Dobrze, wypróbowałem to w ten sposób (edytuj w pytaniu): Nie jestem pewien, czy jest to całkowicie słuszna przyczyna Nie osiągam dobrych wyników .. przez większość czasu jest tylko wiele czerwonych wypukłych linii kadłuba przekraczających img .. – ddd

+0

lub jest to ze względu na findcontour (próbowałem filtr i próg i filtr gaussa przed findcontour) – ddd

0

musimy wyraźny hullPointList przed punktem liście dodatków do konturu

hullPointList .clear(); 
for(int j=0; j < hullInt.toList().size(); j++){ 
     hullPointList.add(contours.get(k).toList().get(hullInt.toList().get(j))); 
    } 
Powiązane problemy