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

OpenCV从YUV_420_888平面创建3个mat对象,opencv,opencv3.0,opencv4android,Opencv,Opencv3.0,Opencv4android,是否仍然可以创建3个mat对象来保存YUV_420_888平面数据。 一个代表Y,另一个代表U,最后一个代表V平面 我不想将它们转换为BGR或任何东西,只需按上述方式保存数据。您可以使用分割垫 例如在BGR图像中(我将在C++中显示,因为我不是OpenCV4Android的): 如果您有一个BGR,您现在将在平面[2]中拥有R平面 另一种可能是,只获取平面缓冲区,例如(现在是Java Android): 你可以使用分裂的垫子 例如在BGR图像中(我将在C++中显示,因为我不是OpenCV4And

是否仍然可以创建3个mat对象来保存YUV_420_888平面数据。 一个代表Y,另一个代表U,最后一个代表V平面


我不想将它们转换为BGR或任何东西,只需按上述方式保存数据。

您可以使用分割垫

例如在BGR图像中(我将在C++中显示,因为我不是OpenCV4Android的):

如果您有一个BGR,您现在将在
平面[2]
中拥有R平面

另一种可能是,只获取平面缓冲区,例如(现在是Java Android):


你可以使用分裂的垫子

例如在BGR图像中(我将在C++中显示,因为我不是OpenCV4Android的):

如果您有一个BGR,您现在将在
平面[2]
中拥有R平面

另一种可能是,只获取平面缓冲区,例如(现在是Java Android):

cv::Mat src = cv::imread("some.png");
cv::Mat planes[3];
cv::split(src, planes);
/* 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