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

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

  • 在为轮廓添加列表点之前,我们需要清除hullPointList

    hullPointList .clear();
    for(int j=0; j < hullInt.toList().size(); j++){
            hullPointList.add(contours.get(k).toList().get(hullInt.toList().get(j)));
        }
    
    链接地址: http://www.djcxy.com/p/60334.html

    上一篇: 通过采取什么措施来解决这些错误(iOS)......有什么建议?

    下一篇: android java opencv 2.4凸凹凸起