android java opencv 2.4 convexhull convexdefect

独自空忆成欢 提交于 2019-11-28 00:38:02

问题


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

回答1:


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



回答2:


we need clear hullPointList before add list point for a contour

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


来源:https://stackoverflow.com/questions/10961660/android-java-opencv-2-4-convexhull-convexdefect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!