gpt4 book ai didi

android - Google Tango Leibniz API 中的彩色图像

转载 作者:行者123 更新时间:2023-11-30 17:14:40 24 4
gpt4 key购买 nike

我正在尝试从 Google Tango 的 onFrameAvailable 方法中捕获图像数据。我正在使用莱布尼茨版本。在头文件中据说缓冲区包含 HAL_PIXEL_FORMAT_YV12 像素数据。在 release notes他们说缓冲区包含 YUV420SP。但在documentation据说像素是RGBA8888格式()。另外我有点困惑。我并没有真正获得图像数据,但有很多洋红色和绿色。现在我正在尝试从 YUV 转换为 RGB 类似于 this one 。我想步幅也有问题。这是 onFrameAvailable 方法的代码:

int size = (int)(buffer->width * buffer->height);
for (int i = 0; i < buffer->height; ++i)
{
for (int j = 0; j < buffer->width; ++j)
{
float y = buffer->data[i * buffer->stride + j];
float v = buffer->data[(i / 2) * (buffer->stride / 2) + (j / 2) + size];
float u = buffer->data[(i / 2) * (buffer->stride / 2) + (j / 2) + size + (size / 4)];

const float Umax = 0.436f;
const float Vmax = 0.615f;

y = y / 255.0f;
u = (u / 255.0f - 0.5f) ;
v = (v / 255.0f - 0.5f) ;

TangoData::GetInstance().color_buffer[3*(i*width+j)]=y;
TangoData::GetInstance().color_buffer[3*(i*width+j)+1]=u;
TangoData::GetInstance().color_buffer[3*(i*width+j)+2]=v;
}
}

我正在 fragment 着色器中进行 yuv 到 rgb 的转换。

有人获得过 Google Tango Leibniz 版本的 RGB 图像吗?或者有人在从 YUV 转换为 RGB 时遇到类似的问题?

最佳答案

YUV420SP(又名 NV21)暂时是正确的。解释是here 。在这种格式中,您有一个 width x height 数组,其中每个元素都是一个 Y 字节,后跟一个 width/2 x height/2 数组,其中每个元素是一个 V 字节和一个 U 字节。您的代码正在实现 YV21,它具有单独的 V 和 U 数组,而不是将它们交错在一个数组中。

您提到您正在 fragment 着色器中进行 YUV 到 RGB 的转换。如果您只想绘制相机图像,则可以使用 TangoService_connectTextureId()TangoService_updateTexture() 而不是 TangoService_connectOnFrameAvailable()。这种方法已经以 OpenGL 纹理的形式向您提供相机图像,该纹理为您的 fragment 着色器提供 RGB 值,而无需担心像素格式细节。您需要绑定(bind)到GL_TEXTURE_EXTERNAL_OES(而不是GL_TEXTURE_2D),您的 fragment 着色器将如下所示:

#extension GL_OES_EGL_image_external : require

precision mediump float;

varying vec4 v_t;
uniform samplerExternalOES colorTexture;

void main() {
gl_FragColor = texture2D(colorTexture, v_t.xy);
}

如果出于某种原因您确实想将 YUV 数据传递到 fragment 着色器,则无需将其预处理为 float 即可执行此操作。事实上,您根本不需要解压它 - 对于 NV21,只需为 Y 定义一个 1 字节纹理,为 VU 定义一个 2 字节纹理,然后按原样加载数据。您的 fragment 着色器将为两者使用相同的纹理坐标。

关于android - Google Tango Leibniz API 中的彩色图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226424/

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