【问题标题】:YUV422 to TIFF and PNG conversion giving different valuesYUV422 到 TIFF 和 PNG 的转换给出不同的值
【发布时间】:2019-11-29 11:30:56
【问题描述】:

我一直在处理从 CMOS 图像传感器捕获并保存到 YUV422 的图像。我已经使用 ImageMagick 和 FFMPEG 将它们转换为 TIFF 和 PNG 格式,并对图像进行了一些分析,并注意到两种图像格式之间的 RGB 值不同。我有点困惑,因为它们都是无损格式,而且图像都在 sRGB 色彩空间中(使用 ImageMagick 'identify' 命令验证)。 他们不使用相同的 YCbCr->sRGB 转换算法吗?我是否遗漏了有关转换过程的某些内容?

我使用以下命令来转换图像:

ffmpeg -pix_fmt uyvy422 -s 972x972 -i input.yuv output.png
ffmpeg -pix_fmt uyvy422 -s 972x972 -i input.yuv output.tiff

magick -size "972x972" pal:input.yuv output.png
magick -size "972x972" pal:input.yuv output.tiff

【问题讨论】:

    标签: image ffmpeg format


    【解决方案1】:

    我想我找到了差异的原因:

    PNG输出图片保存为RGB格式,TIFF输出图片保存为YUV422格式。

    我使用以下命令创建未压缩的图像(无 LZW 无损压缩):

    ffmpeg -y -pix_fmt uyvy422 -s 972x972 -i input.yuv -compression_level 0 output.png
    ffmpeg -y -pix_fmt uyvy422 -s 972x972 -i input.yuv -compression_algo raw output.tiff
    

    output.tiff 的大小:1,891,802 字节(约 972*972*2)。
    output.png 的大小:2,844,142 字节(约 972*972*3)。

    • 对于 PNG 图像,FFmpeg 执行 YUV422 到 RGB 的转换。
    • 对于 TIFF 图像,查看器进行 YUV422 到 RGB 的转换。

    FFmpeg和查看器使用的转换公式和插值方法有细微差别。

    这可能意味着您在显示 Tiff 图像时可能会从不同的查看者那里得到不同的结果。

    为了避免差异,可以强制 FFmpeg 将图像转换为 RGB:

    ffmpeg -pix_fmt uyvy422 -s 972x972 -i input.yuv -pix_fmt rgb24 output.png
    ffmpeg -pix_fmt uyvy422 -s 972x972 -i input.yuv -pix_fmt rgb24 output.tiff
    

    现在 PNG 和 TIFF 是相同的。

    【讨论】:

    • 这似乎已经解决了。感谢您的回复。我看到 ImageMagick 'identify' 工具和 GIMP 将它们报告为在 sRGB 空间中,所以假设它们都是平等的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多