OpenCV Android应用程序停止没有错误消息

时间:2016-06-28 16:53:40

标签: android opencv

我使用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

0 个答案:

没有答案