热门将Mat对象转换为“onPreviewFrame”中的byte []数据对象,并在相机预览中显示它

时间:2016-07-04 16:44:54

标签: android opencv

在我的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);

}

提前致谢!

1 个答案:

答案 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方法,它工作正常!