Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
389 views
in Technique[技术] by (71.8m points)

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);
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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()

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...