【发布时间】:2013-07-09 08:17:23
【问题描述】:
请帮帮我,
我在 Android 上遇到了 Convex Hull 的问题。我使用 Java 和 OpenCV 2.3。
在使用 Java 之前,我使用 Visual Studio 2008 在 C++ 上创建了它。
此代码可以在 C++ 上成功运行。
现在,我想在 Android 上将它从 C++ 转换为 Java。当我在 SDK Android 模拟器上运行它时,我发现了类似“强制关闭”的错误。
这是我的 C++ 代码:
vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
findContours( canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0) );
drawing = Mat::zeros( canny_output.size(), CV_64F );
/// Find the convex hull object for each contour
vector<vector<Point> > hull ( contours.size() );
for( int i = 0; i < contours.size(); i++ )
{ convexHull( Mat(contours[i]), hull[i], false );
}
for(size_t i = 0; i < contours.size(); i++){
drawContours( drawing, hull, i, Scalar(255, 255, 255), CV_FILLED ); // FILL WHITE COLOR
}
这是我在 Android 上的代码:
Mat hierarchy = new Mat(img_canny.rows(),img_canny.cols(),CvType.CV_8UC1,new Scalar(0));
List<Mat> contours =new ArrayList<Mat>();
List<Mat> hull = new ArrayList<Mat>(contours.size());
drawing = Mat.zeros(img_canny.size(), im_gray);
Imgproc.findContours(img_dilasi, contours, hierarchy,Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0, 0));
for(int i=0; i<contours.size(); i++){
Imgproc.convexHull(contours.get(i), hull.get(i), false);
}
for(int i=0; i<contours.size(); i++){
Imgproc.drawContours(drawing, hull, i, new Scalar(255.0, 255.0, 255.0), 5);
}
为了您的信息,我在我的代码中对 Convex Hull 做了一些修改。 我在轮廓内填充颜色。
谁能帮我解决我的问题?
非常感谢您的帮助。
【问题讨论】:
-
很难说是什么导致了您的问题。你得到的具体错误是什么?有没有相关的日志输出?
-
当我在 SDK Android Simulator 上运行它时,出现 windows 错误,“应用程序意外停止”,我被告知单击“强制关闭”停止。当我检查 Log Cat 错误 Eclipse 时,我发现进程停止在这一行“Imgproc.convexHull(contours.get(i), hull.get(i), false);”我不知道为什么该过程在那条线上停止。你不能帮我解释一下吗?
-
我想我在声明“hull”变量时犯了一个错误。但是,我不知道如何解决这个问题。我想我已经根据适用的规定声明了该变量。你的意见呢?你认为我的代码中变量“hull”的声明不正确吗?
-
发布的答案是否解决了您的问题?如果是这样,你会accept 其中之一吗?如果没有,请发表评论说明我们可以改进的地方。
标签: java android opencv convex-hull