我尝试了适用于Android 3.4.1全新JavaCamera2View
的OpenCV,但速度太慢(仅显示摄像机视图,速度约为15fps)。当我尝试使用较旧的JavaCameraView
时,它给了我不错的效果(〜30fps,这是我的相机的极限)。
我想知道Camera2版本如此之慢并研究实现的原因。我注释掉了图像的所有处理和渲染(只是让相机绘制到内部ImageReader
对象,然后使用acquireLastImage()
方法将其读取),它仍然是15 fps。但是,当我将目标表面从ImageReader
对象更改为视图本身时,它突然给了我30 fps。
问题是,为什么ImageReader
课这么慢?
我的猜测是ImageReader正在使用glReadPixels()
从使用OpenGL的Surface读取图像,这非常慢,因为它需要将图像从GPU内存传输到CPU内存(或者可能正在等待GPU刷新? ),但我不确定,因为ImageReader
所做的全部隐藏在本机代码中。
或者ImageReader
很好,OpenCV是否缺少某些内容?
我正在使用ASUS Zenfone 4 Max,Android 7.1.1。
答案 0 :(得分:0)
我想这与LEGACY相机HAL有关。我最近也遇到了这个问题,实际上,如果您仅使用glReadPixel
,则可以获得比ImageReader更好的帧速率。检查以下答案:
https://stackoverflow.com/a/51083567/2606068