我正在尝试创建一个实时处理相机图像并将其显示在屏幕上的应用程序。我正在使用camera2 API。我创建了一个本机库来使用 OpenCV 处理图像。
到目前为止,我已经成功设置了一个 ImageReader 来接收 YUV_420_888 格式的图像,如下所示。
mImageReader = ImageReader.newInstance(
mPreviewSize.getWidth(),
mPreviewSize.getHeight(),
ImageFormat.YUV_420_888,
4);
mImageReader.setOnImageAvailableListener(mOnImageAvailableListener, mImageReaderHandler);
从那里我可以获取图像平面(Y、U 和 V),获取它们的 ByteBuffer 对象并将它们传递给我的本机函数。这发生在mOnImageAvailableListener
:
Image image = reader.acquireLatestImage();
Image.Plane[] planes = image.getPlanes();
Image.Plane YPlane = planes[0];
Image.Plane UPlane = planes[1];
Image.Plane VPlane = planes[2];
ByteBuffer YPlaneBuffer = YPlane.getBuffer();
ByteBuffer UPlaneBuffer = UPlane.getBuffer();
ByteBuffer VPlaneBuffer = VPlane.getBuffer();
myNativeMethod(YPlaneBuffer, UPlaneBuffer, VPlaneBuffer, w, h);
image.close();
在本机端,我可以从缓冲区获取数据指针,创建一个cv::Mat
从数据中提取数据并进行图像处理。
现在下一步是显示我处理后的输出,但我不确定如何显示我处理后的图像。任何帮助将不胜感激。