我尝试了android 3.4.1的全新版本的opencv,但速度太慢了(仅显示相机视图的速度约为15fps)。当我尝试旧的JavaCamera2View时,它给了我很好的效果(大约每秒30帧,这是我相机的极限)。
我想知道为什么camera2版本这么慢,并研究了实现。我注释掉了图像的所有处理和渲染(只是让相机绘制到内部JavaCameraView对象,然后使用ImageReader方法读取它),它仍然是15 fps。然而,当我将目标曲面从acquireLastImage()对象更改为视图本身的曲面时,它突然给了我每秒30帧的速度。
所以问题是,为什么上课这么慢?
我猜imagereader是从surface读取图像的,surface使用opengl,ImageReader这非常慢,因为它需要将图像从gpu内存传输到cpu内存(或者它可能正在等待gpu刷新?),但我不能确定,因为ImageReader所做的一切都隐藏在本机代码中。
或者说,glReadPixels()只是很好,opencv是否遗漏了什么?
我用的是华硕Zenfone 4 Max,Android 7.1.1。

最佳答案

我想这和传统相机哈尔有关。我最近也碰到了这个问题,实际上如果你只使用glReadPixel你可以获得比imagereader更好的帧速率。检查此答案:
https://stackoverflow.com/a/51083567/2606068

08-18 04:15
查看更多