java - 在 android 上使用 openCV matchTemplate 会出现巨大的减速

标签 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;
}

最佳答案

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

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

关于java - 在 android 上使用 openCV matchTemplate 会出现巨大的减速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52808735/

相关文章:

matlab - SVD 在 Matlab 和 OpenCV 中计算不同的结果

java - 如何在 Maven 项目中使用 OpenCV 构建(opencv 和 opencv_contrib)

c - OpenCV 在单独的窗口中显示传入视频和修改后的视频

java - 如何使用我们在SD卡中创建的 key (符合全局平台的智能卡)

java - 我们如何让主线程等待异步日志记录完成(或其他方式)

java - 更改框架字体以及框架中所有组件的字体

java - 使用 Apache Commons VFS 通过 FTP URI 导航到根目录

ios - 适用于 iOS 图形应用程序的 OpenCV

java - response.flushBuffer() 不工作

algorithm - 除了 Haar 级联之外,还有哪些算法或方法可用于自定义对象检测?