【问题标题】:android java opencv 2.4 convexhull convexdefectandroid java opencv 2.4 凸壳凸缺陷
【发布时间】:2012-06-13 06:27:54
【问题描述】:

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

convexhull 想要一个 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);

【问题讨论】:

    标签: java android opencv convex-hull


    【解决方案1】:

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

    convexHull(MatOfPoint points, MatOfPoint hull);
    

    就像可以用 C++ 调用一样。

    虽然我们没有添加它,但您需要手动创建 MatOfPoint 格式的 hull

    • 使用MatOfPoint::toArray()MatOfPoint::toList() 获取轮廓点
    • 使用MatOfInt::toArray()MatOfInt::toList() 获取船体索引
    • 创建一个新的 Point[]List&lt;Point&gt; 仅包含船体点
    • 通过MatOfPoint::fromArray()MatOfPoint::fromList() 将其转换为MatOfPoint
    • 致电Core.drawContours()

    【讨论】:

    • 好吧,我试过这样(有问题的编辑):我不确定它是否完全正确,因为我没有得到好的结果.. 大多数时候只有很多红色凸包线穿过 img..
    • 或者这是因为 findcontour(我在 findcontour 之前尝试了一个精明和/或阈值和高斯滤波器)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 2011-10-12
      • 1970-01-01
      • 2013-07-09
      • 2012-05-24
      • 2015-09-29
      • 2012-10-10
      • 1970-01-01
      • 2014-01-29
      相关资源
      最近更新 更多