首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Magick++将YUYV转换为RGB?

如何使用Magick++将YUYV转换为RGB?
EN

Stack Overflow用户
提问于 2016-07-28 08:32:50
回答 2查看 1.2K关注 0票数 0

通过V4L2从设备中读取图像。图片采用YUV 4:2:2格式,又名V4L2_PIX_FMT_YUYV,又名YUY2。

我想要做的是要么将字节块转换为RGB,要么更好地实例化一个Magick++图像对象,并告诉它数据在YUYV中而不是RGB24中。

这件事能轻易做到吗?Magick++文档非常简单,没有提供任何帮助:1Image.html

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-28 09:27:38

您可以轻松地将YUV422转换为RGB888。让data是以YUV422格式加载的图像数据,然后:

代码语言:javascript
复制
u  = data[0];
y1 = data[1];
v  = data[2];
y2 = data[3];
...
...

然后:

代码语言:javascript
复制
rgb[0] = yuv2rgb(y1, u, v);
rgb[1] = yuv2rgb(y2, u, v);
...
...

yuv2rgb使用下列公式

代码语言:javascript
复制
R = Y + 1.140*V
G = Y - 0.395*U - 0.581*V
B = Y + 2.032*U
票数 2
EN

Stack Overflow用户

发布于 2016-07-28 14:17:14

DimChtz的答案将是最简单的,因为任务是直接向前的。

ImageMagick确实支持这些格式

代码语言:javascript
复制
     UYVY* rw-   16bit/pixel interleaved YUV
      YUV* rw-   CCIR 601 4:1:1 or 4:2:2

可以被magick++利用,比如.

代码语言:javascript
复制
 // 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程序接口板,并发出特性请求和/或寻求指导。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38631060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档