我正在尝试为android 6.0 平台开发一个行车记录仪应用程序。此应用程序可以录制从相机捕获的视频并保存为 mp4 文件。 在保存过程中,我希望应用程序也能用图像一张一张地捕捉图像我可以用 opencv 做一些图像分析,比如找到车道边缘或测试我的车前面是否有东西,等等。
我已经研究了示例应用程序 Camera2Video,现在我可以让我的应用程序保存从相机捕获的视频 mp4 文件。
我的下一步是让我的应用程序知道从相机捕获的每张图像何时准备就绪,或者何时 MediaRecorder 获得单张图像,以便我可以拍摄该图像以用于后续过程。
我的问题是,如何配置监听器或任何可以让我的应用知道从相机捕获的每张图像何时准备就绪的东西?
最佳答案
从 ImageReader 添加一个额外的输出表面(如果您想要基于 GPU 的处理,则来自 SurfaceTexture,或者来自用于基于 RenderScript 的处理的分配)在您的捕获 session 创建中。然后对于您的记录请求,将 ImageReader 表面也作为目标包括在内。
您可以制作此流的最大分辨率取决于相机设备的功能; LEGACY 级别的设备无法真正做到这一点,但在 RECORD、RECORD 和 PREVIEW 分辨率下使用 3 个输出就可以了。
然后为 ImageReader 创建一个监听器并使用 onImageAvailable处理帧的回调。
关于Android Camera2 API MediaRecoder 如何捕获图像(不是流也不是文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35056922/