使用 Camera2 预览处理后的图像



我正在使用 Camera2 基本示例。我希望用openCV做一些基本的图像处理。

这个问题讨论了同样的问题,但答案只谈到通过ImageReader获取预览帧。

我的问题是
是否可以在图像帧渲染/显示到 SurfaceTexture 之前对其进行处理。

ImageReader 在你从中获取的每个图像中为你提供了一组 ByteBuffer;你可以在 Java 或本机代码中对这些操作。

最简单的情况是捕获 JPEG 并将其保存到磁盘,但您也可以请求YUV_420_888数据,然后根据需要进行处理。

编辑以回复评论:

如果您从 TextureView 获取了 SurfaceTexture,并将其传递给相机,则无法截获两者之间的缓冲区。 如果要修改它们,则需要创建一个中间目标,摄像机将缓冲区发送到该中间目标,对其进行编辑,然后将它们发送到 TextureView 以显示。

有几种选择。 可能最有效的方法是在中间使用 EGL:

Camera -> SurfaceTexture -> EGL -> SurfaceTexture -> TextureView

这需要大量样板代码来创建 EGL 上下文,但如果可以将编辑编写为 EGL 着色器,则效果很好。 如果我没记错的话,您可以通过从中创建 EGLImage 来渲染到 TextureView 给出的 SurfaceTexture,然后您可以创建另一个传递给相机的 SurfaceTexture,在 EGL 着色器中将其用作要渲染的纹理。

我建议查找 EGL 教程,因为这需要相当多的代码。

最新更新