gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:23:18 25 4
gpt4 key购买 nike

我在 android 中开发,并希望将 YUV 格式的相机预览回调中的字节数组转换为 rgb 格式。

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

它在 java 中完美运行,但我的问题是我想在 c++ 中创建函数(我使用的是 ndk,对 c++ 不是很熟悉)。

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

有没有人有类似的功能或这个功能在 C++ 中工作?

谢谢。

最佳答案

在 C++ 中从 YUYV 到 RGB 的转换:

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 也是一个 unsigned char*。

可以找到有关 YUYV 的更多信息 here

关于 YUYV 的更多说明 --> RGB 查看 this

关于android - 在 c++ (android-ndk) 中从 YUV 转换为 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com