android java opencv 2.4 convexhull convexdefect

时间:2012-06-09 14:07:17

标签: java android opencv convex-hull

Open-CV 2.4 Android-Java:

我搜索了这样的轮廓(MatofPoint列表):

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

然后是凸包(必须是MatofInt列表)

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

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

凸包需要一个MatofInt,但是drawcontours想要一个MatofPoint ..那该怎么办?

提前......


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

2 个答案:

答案 0 :(得分:4)

看起来OpenCV Java API缺少另一个convexHull()签名:

convexHull(MatOfPoint points, MatOfPoint hull);

喜欢用C ++调用。

虽然我们尚未添加,但您需要手动创建 MatOfPoint 格式的外壳

  • 使用MatOfPoint::toArray()MatOfPoint::toList()获取轮廓点
  • 使用MatOfInt::toArray()MatOfInt::toList()获取船体索引
  • 仅使用船体点数创建新的Point[]List<Point>
  • 通过MatOfPointMatOfPoint::fromArray()
  • 将其转换为MatOfPoint::fromList()
  • 致电Core.drawContours()

答案 1 :(得分:0)

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

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