OpenCV从YUV_420_888平面创建3个mat对象

时间:2016-11-28 13:49:55

标签: opencv opencv3.0 opencv4android

无论如何都要创建 3个mat对象来保存YUV_420_888平面数据。 一个用于Y,另一个用于U,最后一个用于V平面。

我不想将它们转换为BGR或其他任何东西,只需保存上面的数据。

1 个答案:

答案 0 :(得分:0)

你可以使用Mat的分裂。

例如在BGR图像中(我将用c ++显示你,因为我不是那个进入opencv4Android):

cv::Mat src = cv::imread("some.png");
cv::Mat planes[3];
cv::split(src, planes);

如果您有BGR,现在可以在planes[2]中使用R-Plane。

另一种可能性是,只需获得Planes Buffer(例如Java Android):

/* Get your Image somehow */
Image.Plane Y = img.getPlanes[0];
Image.Plane U = img.getPlanes[1];
Image.Plane V = img.getPlanes[2];

//now just for Y e.g.
ByteBuffer yBuffer = Y.getBuffer();
byte[] yBytes = new Byte[yBuffer.remaining()];
yBuffer.get(yBytes);

//read the byte data into a cv::Mat