在我的Android应用程序中,我试图在“onPreviewFrame”中取帧并将它们转换为Mat对象,这样我就可以对它们进行一些图像处理,但我不知道如何将它们转换回byte []类型并让它们在相机预览中显示。
有人知道怎么做吗?
这是我的onPreviewFrame函数,我正在尝试将帧颜色更改为灰色:
public void onPreviewFrame(byte[] data, Camera arg1)
{
Mat mRgba = new Mat(PreviewSizeWidth, PreviewSizeHeight, CvType.CV_8UC3);
mRgba.put(0, 0, data);
Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_BGR2GRAY);
mRgba.put(0, 0, data);
mCamera.addCallbackBuffer(data);
}
提前致谢!
答案 0 :(得分:0)
从较旧的OpenCV摄像机查看器管道实现:
private Mat mYuv, mGraySubmat;
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if(mYuv == null) {
mYuv = new Mat(height + height / 2, width, CvType.CV_8UC1);
mGraySubmat = mYuv.submat(0, height, 0, width);
}
mYuv.put(0, 0, data);
Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
}
我认为你最后可以调用addCallbackBuffer方法,它工作正常!