我为 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。