Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android java opencv 2.4 convexhull convexdefect

Open-CV 2.4 Android-Java:

i have searched for contours (list of MatofPoint) like this:

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

and then the convexhull (has to be a list of MatofInt )

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

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

The convexhull wants a MatofInt but the drawcontours wants a MatofPoint.. So what to do?

Thx in advance..


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);
like image 581
ddd Avatar asked Jun 09 '12 14:06

ddd


1 Answers

Looks like OpenCV Java API lacks another convexHull() signature:

convexHull(MatOfPoint points, MatOfPoint hull);

like it's possible to call in C++.

While we haven't added it, you need to create the hull in MatOfPoint format manually:

  • use MatOfPoint::toArray() or MatOfPoint::toList() to get contour's points
  • use MatOfInt::toArray() or MatOfInt::toList() to get their indexes for hull
  • create a new Point[] or List<Point> with hull's points only
  • convert it to MatOfPoint via MatOfPoint::fromArray() or MatOfPoint::fromList()
  • call Core.drawContours()
like image 145
OpenCV4Android Avatar answered Nov 20 '22 00:11

OpenCV4Android