【问题标题】:Should CbCr values for LibJPEG be signed or unsignedLibJPEG 的 CbCr 值是有符号还是无符号
【发布时间】:2011-08-11 15:10:12
【问题描述】:

我有一个 SoC 摄像头模块,它输出以下范围内的 YCbCr 数据: Y (0 -> 255) Cb 和 Cr (-127 -> 127)

现在我的问题是,libjpeg 是否接受这些带符号的值,还是应该更改带符号的值,使它们在 0 -> 255 的范围内?

我正在使用 ATMEL 提供的 libjpeg 'bolt-on' jpeg 压缩器作为 SAM3s-EK 的一部分。 ijg_compress_raw_no_padding 函数的附加部分的代码如下所示...据我所知,这采用了我漂亮的 YCbCr 数据数组并操作成 libjpeg 喜欢的形式;-)

    static void _init_sarray_imcu_row(JSAMPIMAGE *image,JSAMPLE *src,uint32_t y_pos,uint32_t width,uint32_t rows)
{
    JSAMPLE *r0;
    JSAMPLE *r1;
    JSAMPARRAY ay = (*image)[0];
    JSAMPARRAY au = (*image)[1];
    JSAMPARRAY av = (*image)[2];
    JSAMPROW ry0,ru,rv,ry1;    

    int i,j;
    for( i = 0; i < rows/2 ;i++)
    {
        r0 = & src[ (i * 2 + y_pos) * width * 2];
        r1 = & src[ (i * 2 + y_pos + 1) * width * 2];

        ry0 = ay[i*2];
        ry1 = ay[i*2+1];

        ru = au[i];
        rv = av[i];

        for(j = 0; j < width /2; j++)
        {
            ry0[j * 2] = r0[j*4];
            ry1[j * 2] = r1[j*4];
            ry0[j * 2 + 1] = r0[j*4+2];
            ry1[j * 2 +1] = r1[j*4+2];

            ru[j] = (r0[ j * 4 + 1] + r1[j*4+1])/2;
            rv[j] = (r0[ j * 4 + 3] + r1[j*4+3])/2;

        }


    }
}

我也不完全确定值应该在我发送 this 函数的原始数据数组中的顺序,即; YCbCrY 或 YCbYCr 等,但我可以玩这个,因为当查看输出图像时它变得很明显。

因为我得到的图像看起来有些颜色混合在一起,红色和蓝色似乎被交换了,黄色和绿色也是如此。

所以我重复我最初的问题,以防它在那里丢失:

这个函数是只接受区域 0->255 的值,还是接受来自相机的 Y (0->255) 和 Cb & Cr (-127->127) 的数据?

如果有人可以就应该打包数组的顺序提供建议,那也会有所帮助。

非常感谢 去Boogle

【问题讨论】:

    标签: yuv libjpeg


    【解决方案1】:

    根据Wikipedia JFIF 使用的是 0-255。看起来您必须在 Cb 和 Cr 色差上添加 128。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多