Android Image到具有3个通道的OpenCV Mat

时间:2019-11-28 10:07:35

标签: android opencv

我正在尝试将我的android相机(Android.media.Image,YUV格式,1920 * 1080)捕获的图像转换为openCV Mat。 为此,我必须将Image对象转换为字节数组,然后用此数组提供我的opencv Mat。

它起作用了,但看来我的opencv Mat只有一个通道而不是3个通道。你知道它从哪里来吗?

    private byte[] convertYuvToByteArray(Image image){

        Image.Plane Y = image.getPlanes()[0];
        Image.Plane U = image.getPlanes()[1];
        Image.Plane V = image.getPlanes()[2];

        int Yb = Y.getBuffer().remaining();
        int Ub = U.getBuffer().remaining();
        int Vb = V.getBuffer().remaining();

        byte[] data = new byte[Yb + Ub + Vb];

        Y.getBuffer().get(data, 0, Yb);
        U.getBuffer().get(data, Yb, Ub);
        V.getBuffer().get(data, Yb+ Ub, Vb);

        return data;
    }


// Main function
final byte[] data = convertYuvToByteArray(image);
Mat matTest = new Mat();
matTest.put(0, 0, data);

// DIsplay number of channels, rows and cols
Log.d("channels", Integer.valueOf(matTest.channels()).toString()); // channels 1, should be 3
Log.d("rows", Integer.valueOf(matTest.rows()).toString()); // rows 1080
Log.d("cols", Integer.valueOf(matTest.cols()).toString()); // cols 1920



0 个答案:

没有答案