我正在编写一个Android应用程序,它使用OpenCV在图像上应用高斯模糊,然而,它非常慢。
// 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 ms。有谁知道为什么它在android上这么慢?
答案 0 :(得分:1)
问题是缺少一些数据,因为&#39; Android&#39;没有任何意义:图像有多大?你用的是哪款手机?您使用的是库存构建,还是自己构建它?一个25x25的内核非常大。
如果您在armv7-a手机上使用Android版本,并且可能需要大图像(几百万像素)。 OpenCV的Android版本没有使用NEON,也没有使用多线程,这将有很大帮助。此外,大多数Android手机在单核处理过程中比iPhone(特别是5s和6)慢得多,并且它们倾向于减少CPU时钟以节省电池并避免散热问题。
我建议您在启用NEON的情况下自行构建OpenCV并尝试一下。