首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中将YUV转换为RGB (android-ndk)

在c++中将YUV转换为RGB (android-ndk)
EN

Stack Overflow用户
提问于 2012-02-01 23:52:43
回答 2查看 20K关注 0票数 3

我是在安卓开发的,并想转换字节数组从相机的previewCallback,这是YUV格式,以rgb格式。

我使用了这个答案中给出的函数:Getting frames from Video Image in Android

它在c++中工作得很好,但我的问题是我想用c++编写这个函数(我使用的是ndk,对java不是很熟悉)。

我尝试在c++中创建函数,但总是产生奇怪的结果(例如,图片都是绿色的)。

有没有人有类似的函数或在c++中工作的这个函数?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-05-07 22:25:53

C++中YUYV到RGB的转换:

代码语言:javascript
复制
unsigned char* rgb_image = new unsigned char[width * height * 3]; //width and height of the image to be converted

int y;
int cr;
int cb;

double r;
double g;
double b;

for (int i = 0, j = 0; i < width * height * 3; i+=6 j+=4) {
    //first pixel
    y = yuyv_image[j];
    cb = yuyv_image[j+1];
    cr = yuyv_image[j+3];

    r = y + (1.4065 * (cr - 128));
    g = y - (0.3455 * (cb - 128)) - (0.7169 * (cr - 128));
    b = y + (1.7790 * (cb - 128));

    //This prevents colour distortions in your rgb image
    if (r < 0) r = 0;
    else if (r > 255) r = 255;
    if (g < 0) g = 0;
    else if (g > 255) g = 255;
    if (b < 0) b = 0;
    else if (b > 255) b = 255;

    rgb_image[i] = (unsigned char)r;
    rgb_image[i+1] = (unsigned char)g;
    rgb_image[i+2] = (unsigned char)b;

    //second pixel
    y = yuyv_image[j+2];
    cb = yuyv_image[j+1];
    cr = yuyv_image[j+3];

    r = y + (1.4065 * (cr - 128));
    g = y - (0.3455 * (cb - 128)) - (0.7169 * (cr - 128));
    b = y + (1.7790 * (cb - 128));

    if (r < 0) r = 0;
    else if (r > 255) r = 255;
    if (g < 0) g = 0;
    else if (g > 255) g = 255;
    if (b < 0) b = 0;
    else if (b > 255) b = 255;

    rgb_image[i+3] = (unsigned char)r;
    rgb_image[i+4] = (unsigned char)g;
    rgb_image[i+5] = (unsigned char)b;
}

此方法假设您的yuyv_image也是一个无符号字符*。

欲了解更多有关YUYV的信息,请访问here

有关YUYV --> RGB的更多说明,请查看this

票数 9
EN

Stack Overflow用户

发布于 2012-02-02 00:30:50

看看这个:http://pastebin.com/mDcwqJV3

YUYV到RGB24的定点转换

此外,一些相机返回'UYVY‘字节orger中的原始图像,因此在转换函数中进行相应的更改。

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

https://stackoverflow.com/questions/9098881

复制
相关文章

相似问题

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