在Android

时间:2018-10-15 01:46:56

标签: java opencv

我正在使用openCV的_matchTemplate_方法在Android相机框架上制作带有跟踪Mat模式的小型项目。

但是,当我的代码到达_matchTemplate__minMaxLoc_时,手机上的帧率下降到每10秒〜1,但是在Android Profiler中,内存和CPU的使用与奶奶一样心电图。

我认为可能是因为脚本等待查找匹配项所致,但是我在PC上的一系列图片上进行了尝试,花了不到不到一秒钟的时间浏览了200多张图片(即使没有匹配,它也会指向左上角角落,那里没有搭便车)。

以下是我的跟踪方法的代码:

public Mat simpleTrack(Mat input, boolean showCrosshair, boolean showTracker)
{
    if (firstRun)
    {
        crosshairDimensions(input);
        firstRun = false;
    }

    if (showCrosshair)
    {
        Imgproc.rectangle(input, new Point(rowstart, colstart), new Point(rowend, colend), new Scalar(255, 0, 0), 3);
    }
    else if (showTracker)
    {
        if (getTemplate)
        {
            template = input.submat(rowstart, rowend, colstart, colend);
            getTemplate = false;
        }
        Imgproc.matchTemplate(input, template, mRgbaM, Imgproc.TM_CCOEFF_NORMED);
        Point top_left = Core.minMaxLoc(mRgbaM).maxLoc;
        Point bottom_right = new Point(top_left.x + framewidth, top_left.y + frameheight);
        Imgproc.rectangle(input, top_left, bottom_right, new Scalar(0, 255, 0), 3);
    }
    //call Garbage Collector every n'th cycle iteration
    if (iteration % cycle == 0)
    {
        System.gc();
    }
    iteration++;
    return input;
}

1 个答案:

答案 0 :(得分:0)

好吧,所以如果有人遇到类似问题,则问题是由提供的低端Android设备引起的-在较新的设备上,代码开始加速。

让我进一步提高性能的是将输入Mat从RGB更改为灰度(或使用阈值滤镜,因此脚本不会阻塞超过10MB的文件)。我还将分辨率从4k降低到了高清。