3

我为 Android 3.4.1 的全新版本尝试了 OpenCV,JavaCamera2View但速度太慢(仅显示相机视图约 15fps)。当我尝试使用旧版本时JavaCameraView,它给了我很好的结果(~30fps,这是我相机的极限)。

我想知道 Camera2 版本为什么这么慢,并研究了实现。我注释掉了图像的所有处理和渲染(只是让相机绘制到内部ImageReader对象,然后使用acquireLastImage()方法读取它),它仍然是 15 fps。但是,当我将目标表面从ImageReader对象更改为视图本身的表面时,它突然给了我 30 fps。

所以问题是,为什么ImageReader上课这么慢?我的猜测是 ImageReader 正在从使用 OpenGL 的 Surface 读取图像,glReadPixels()这非常慢,因为它需要将图像从 GPU 内存传输到 CPU 内存(或者它可能正在等待 GPU 刷新?),但我不能一定要确定,因为ImageReader所做的一切都隐藏在本机代码中。

或者相反ImageReader很好,OpenCV 是否缺少某些东西?

我正在使用华硕 Zenfone 4 Max,Android 7.1.1。

4

1 回答 1

0

我想这与 LEGACY 相机 HAL 有某种关系。我最近也遇到了这个问题,实际上如果你只使用glReadPixel你可以获得比 ImageReader 更好的帧速率。检查这个答案: https ://stackoverflow.com/a/51083567/2606068

于 2018-06-28T13:17:01.177 回答