使用Camera2预览处理的图像

时间:2018-08-20 07:03:19

标签: android android-camera2

我正在使用Camera2 basic sample。我希望使用openCV进行一些基本的图像处理。

This question讨论了相同的问题,但是答案仅涉及通过ImageReader 获取预览帧。

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

1 个答案:

答案 0 :(得分:1)

ImageReader在从中获取的每个Image中为您提供了一组ByteBuffer;您可以使用Java或本地代码对它们进行操作。

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

根据评论进行编辑:

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

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

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

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

我建议您找到EGL教程,因为这需要大量代码。