【发布时间】:2017-07-15 23:44:03
【问题描述】:
我正在尝试创建一个实时处理相机图像并将其显示在屏幕上的应用。我正在使用 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 并执行图像处理。
现在下一步是显示处理后的输出,但我不确定如何显示处理后的图像。任何帮助将不胜感激。
【问题讨论】:
标签: android c++ opencv native camera2