我正在尝试创建一个应用程序,实时处理相机图像并在屏幕上显示它们。我正在使用camera2 API。我已经创建了一个本地库,使用OpenCV处理这些图像。
到目前为止,我已经成功设置了一个ImageReader来接收YUV_420_888格式的图像,就像这样。
在本地端,我能够从缓冲区获取数据指针,从数据创建一个
到目前为止,我已经成功设置了一个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
并进行图像处理。现在下一步是展示处理后的输出,但我不确定如何展示处理后的图像。非常感谢任何帮助。