如何使用Magick++将YUYV转RGB?
How to use Magick++ to convert YUYV to RGB?
通过 V4L2 从设备读取图像。图像是 YUV 4:2:2 格式,又名 V4L2_PIX_FMT_YUYV,又名 YUY2.
我想做的是将字节的 blob 转换为 RGB,或者更好的是如何实例化 Magick++ Image 对象并告诉它数据是 YUYV 而不是 RGB24。
这容易做到吗? Magick++ 文档是简明的,提供零帮助:http://www.imagemagick.org/api/Magick++/classMagick_1_1Image.html
您可以轻松地将 YUV422
转换为 RGB888
。让 data
成为您以 YUV422
格式加载的图像数据,然后:
u = data[0];
y1 = data[1];
v = data[2];
y2 = data[3];
...
...
然后:
rgb[0] = yuv2rgb(y1, u, v);
rgb[1] = yuv2rgb(y2, u, v);
...
...
对 yuv2rgb
使用以下公式:
R = Y + 1.140*V
G = Y - 0.395*U - 0.581*V
B = Y + 2.032*U
DimChtz 的回答是最简单的,因为任务很简单。
ImageMagick 支持这些格式
UYVY* rw- 16bit/pixel interleaved YUV
YUV* rw- CCIR 601 4:1:1 or 4:2:2
并且可以被 magick++ 之类的东西利用...
// Quickly reorder YUYV to UYVY
unsigned char y1, u, y2, v;
for ( int i = 0; i < buffer_length; i+=4 ) {
y1 = buffer[i ];
u = buffer[i+1];
y2 = buffer[i+2];
v = buffer[i+3];
buffer[i ] = u;
buffer[i+1] = y1;
buffer[i+2] = v;
buffer[i+3] = y2;
}
Magick::Image image;
Magick::Blob blob( buffer, buffer_length );
image.size("176x144");
image.magick("UYVY");
image.read(blob);
// ... etc ...
我建议跳转到 ImageMagick 的 ImageMagick Program Interfaces 版块,并发出功能请求 and/or 寻求指导。
通过 V4L2 从设备读取图像。图像是 YUV 4:2:2 格式,又名 V4L2_PIX_FMT_YUYV,又名 YUY2.
我想做的是将字节的 blob 转换为 RGB,或者更好的是如何实例化 Magick++ Image 对象并告诉它数据是 YUYV 而不是 RGB24。
这容易做到吗? Magick++ 文档是简明的,提供零帮助:http://www.imagemagick.org/api/Magick++/classMagick_1_1Image.html
您可以轻松地将 YUV422
转换为 RGB888
。让 data
成为您以 YUV422
格式加载的图像数据,然后:
u = data[0];
y1 = data[1];
v = data[2];
y2 = data[3];
...
...
然后:
rgb[0] = yuv2rgb(y1, u, v);
rgb[1] = yuv2rgb(y2, u, v);
...
...
对 yuv2rgb
使用以下公式:
R = Y + 1.140*V
G = Y - 0.395*U - 0.581*V
B = Y + 2.032*U
DimChtz 的回答是最简单的,因为任务很简单。
ImageMagick 支持这些格式
UYVY* rw- 16bit/pixel interleaved YUV
YUV* rw- CCIR 601 4:1:1 or 4:2:2
并且可以被 magick++ 之类的东西利用...
// Quickly reorder YUYV to UYVY
unsigned char y1, u, y2, v;
for ( int i = 0; i < buffer_length; i+=4 ) {
y1 = buffer[i ];
u = buffer[i+1];
y2 = buffer[i+2];
v = buffer[i+3];
buffer[i ] = u;
buffer[i+1] = y1;
buffer[i+2] = v;
buffer[i+3] = y2;
}
Magick::Image image;
Magick::Blob blob( buffer, buffer_length );
image.size("176x144");
image.magick("UYVY");
image.read(blob);
// ... etc ...
我建议跳转到 ImageMagick 的 ImageMagick Program Interfaces 版块,并发出功能请求 and/or 寻求指导。