我正在编写一个使用 OpenCV 在图像上应用高斯模糊的 android 应用程序,但是它非常慢。
// Gaussian blur sample code
cv::Mat output;
chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
chrono::duration<int, std::milli> duration;
cv::GaussianBlur(<input>, output, cv::Size(25, 25), 0, 0);
duration = chrono::duration<int, std::milli>(std::chrono::duration_cast<std::chrono::duration<int, std::milli>>(std::chrono::steady_clock::now() - t1);
printf("%d", duration.count()); // Displays ~10-15 ms
当我测量这个 API 所用的时间时,它总是大约 10-15 毫秒。有谁知道为什么它在 Android 上这么慢?
最佳答案
问题缺少一些数据,因为“Android”没有任何意义:图像有多大?你用的是哪款手机?您是使用库存构建还是自己构建? 25x25 的内核相当大。
如果您使用的是在 armv7-a 手机上使用普通 Android 版本的大图像(几百万像素),这可能是意料之中的。 OpenCV 的普通 Android 版本不使用 NEON,也不使用多线程,这会有很大帮助。此外,大多数 Android 手机在单核进程上比 iPhone(特别是 5s 和 6)慢得多,并且它们倾向于降低 CPU 时钟以节省电池并避免散热问题。
我建议您在启用 NEON 的情况下自己构建 OpenCV 并尝试一下。
关于android - OpenCV 高斯模糊在安卓上运行缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31145102/