我使用OpenCV-Library及其Java-Wrappers开发了一个跟踪彩色球的应用程序。 几分钟后,我的应用程序关闭,没有任何错误消息。 logcat和Debugger都没有向我显示任何相关消息。 此外,每个关闭的出现似乎是随机的。
在分析了我的应用程序的内存使用情况后,我发现MatOfPoint.toArray()方法产生了大约97%的数据。 但如果我的应用程序内存不足,则必须出现错误消息。 有可能避免这种方法吗?
这是每帧执行的唯一方法。
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Imgproc.resize(mRgba, mRgbaF, mRgbaF.size(), 0, 0, 0);
Core.flip(mRgbaF, mRgba, -1);
if(mRgba.channels()>1)
Imgproc.cvtColor(mRgba, smHsv, Imgproc.COLOR_RGB2HSV_FULL);
else smHsv = mRgba;
Core.inRange(smHsv, mLowerBound, mUpperBound, mMask);
contours.clear();
Imgproc.findContours(mMask.clone(), contours, mHistory, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
if(contours.size() > 0){
MatOfPoint largestContour = new MatOfPoint();
double max = 0;
for(MatOfPoint m: contours){
double tmp = Imgproc.contourArea(m);
if(tmp > max) {
max = tmp;
largestContour = m;
}
}
points = largestContour.toArray();
Point center = new Point();
float[] radius = new float[1];
if(!largestContour.empty()) {
Imgproc.minEnclosingCircle(new MatOfPoint2f(points), center, radius);
}
return mRgba;
}
我有什么遗漏或是否有办法获取系统的所有错误消息? 我做错了什么?
完整的代码可以在这里找到: BallTracker Activity