android java opencv 2.4 凸壳凸缺陷
Posted
技术标签:
【中文标题】android java opencv 2.4 凸壳凸缺陷【英文标题】:android java opencv 2.4 convexhull convexdefect 【发布时间】: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);
【问题讨论】:
【参考方案1】:看起来 OpenCV Java API 缺少另一个 convehull() 签名:
convexHull(MatOfPoint points, MatOfPoint hull);
就像可以用 C++ 调用一样。
虽然我们没有添加它,但您需要手动创建 MatOfPoint 格式的 hull:
使用MatOfPoint::toArray()
或MatOfPoint::toList()
获取轮廓点
使用MatOfInt::toArray()
或MatOfInt::toList()
获取船体索引
创建一个新的 Point[]
或 List<Point>
仅包含船体点
通过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)));
【讨论】:
以上是关于android java opencv 2.4 凸壳凸缺陷的主要内容,如果未能解决你的问题,请参考以下文章
opencv使用convexityDefects计算轮廓凸缺陷
发现凸缺陷?在 OpenCV 2.3 中,c++ 与 MS Visual Studio 2010