android - OpenCV 高斯模糊在安卓上运行缓慢

标签 android opencv android-ndk

我正在编写一个使用 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/

相关文章:

java - 将两个值作为字符串传递给同一 Activity 会返回一个值 null

java - ArrayList<String> vs String[],如何以及何时使用?

android - 带有旧版 Google Play 服务的 Firebase

python - OpenCV 3.0 为什么关键点的数量超过阈值?

java - Android C++ NDK 示例未更新

android - 如何使用 C 中的 execlp native 函数打开浏览器

java.lang.ClassCastException : java. lang.Boolean 无法转换为 java.util.Map

c++ - 如何将 OpenCV 的输出显示或流式传输到 HTML 页面或其他一些客户端应用程序

macos - opencv 可以与 Objective C 混合编译以进行 OS X 应用程序开发吗?

android - Android Studio 上用于 NDK 的新实验性 Gradle 中的 preBuild 依赖项