【问题标题】:OpenCV gaussian blur is slow on androidOpenCV高斯模糊在android上很慢
【发布时间】:2015-06-30 17:55:28
【问题描述】:

我正在编写一个使用 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 上这么慢?

【问题讨论】:

  • 这是什么意思:API, it always comes ~10-15 ms.?正在启动?
  • 我的意思是这个 GaussianBlur() 调用所花费的时间。添加了更多代码以进行澄清。现在有意义吗?
  • 是的。我不知道你为什么要测量,而不是为了显示它是如何播种的。你是如何加载 OpenCV 的?早在你运行任何 JNI 代码之前,我就会从头开始。
  • 你把它比作什么?
  • 我将它与其他手机进行比较,例如苹果手机。相同的 API 应用高斯模糊所需的时间非常少。

标签: android opencv android-ndk


【解决方案1】:

问题缺少一些数据,因为“Android”毫无意义:图像有多大?你用的是哪款手机?您是使用库存构建,还是您自己构建它? 25x25 的内核相当大。

如果您在 armv7-a 手机上使用库存的 Android 版本,并且具有大图像(几百万像素),那么这可能是意料之中的。 OpenCV 的原生 Android 版本不使用 NEON,也不使用多线程,这将有很大帮助。此外,大多数 Android 手机在单核进程上比 iPhone(特别是 5s 和 6)要慢得多,并且它们倾向于降低 CPU 时钟以节省电池并避免散热问题。

我建议您在启用 NEON 的情况下自己构建 OpenCV 并尝试一下。

【讨论】:

  • 图片大小约为 350x350。我正在使用nexus 7和opencv的库存版本。我尝试在启用 NEON 的情况下构建 OpenCV,但看不到任何改进。看起来这个 GaussianBlur() 可能没有针对 NEON 进行优化。有什么想法吗?
  • 这是nexus 7 2012吗?那是一个缓慢的设备。 2013 年更好,但仍会缓慢。最新的 OpenCV 3 添加了很多 NEON 代码。你用的是那个吗?
  • 在 OpenCV 4.0 中它现在使用霓虹灯!是的! stackoverflow.com/questions/57041536/…
猜你喜欢
  • 2015-10-09
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2016-07-08
  • 1970-01-01
相关资源
最近更新 更多