如何使用python将原始Y视频缓冲区转换为图像?

时间:2018-03-23 06:06:31

标签: python opencv

我有原始视频帧格式YUV (y.raw)提取的Y视频平面(YUV422_SEMI_PLANAR)的原始文件。如何将此y.raw转换为图像png或jpg?

1 个答案:

答案 0 :(得分:3)

你基本上有一个没有打包或交错的单通道灰度图像。所以你有几个选择:

  • 命令行中的ImageMagick,
  • 通过NetPBM PGM格式和Photoshop,或GIMP
  • 的Python

终端

中命令行的ImageMagick

如果您安装了 ImageMagick ,就像大多数Linux发行版一样(或者您可以在Mac和Windows上免费安装),您可以在终端中将其转换为这样。

假设它是640x480像素和8位,你想要一个PNG:

convert -depth 8 -size 640x480 gray:y.raw result.png

假设它是1024x768像素和16位,你想要一个对比度拉伸的JPG:

convert -depth 16 -size 1024x768 gray:y.raw -auto-level result.jpg

通过NetPBM PGM格式和Photoshop或GIMP

假设您没有 ImageMagick ,您可以将该文件转换为NetPBM PGM便携式灰色地图)您可以在GIMPPaintfeh Adob​​e Photoshop 中查看/修改/保存:

{ printf "P5\n640 480\n255\n"; cat y.raw; } > result.pgm

如果你不幸在Windows上并希望这样做,我认为它看起来像这样:

echo "P5"        > header.txt
echo "640 480"  >> header.txt
echo "255"      >> header.txt
copy /b header.txt+y.raw result.ppm

<强>的Python

如果你真的,真的想写一堆Python,它可能看起来像这样:

#!/usr/local/bin/python3

from PIL import Image

file=open("y.raw",'rb')
rawdata=file.read()
file.close()

imgsize = (640,480)

# Use the PIL raw decoder
img = Image.frombytes('L',imgsize,rawdata)
img.save('result.png')

如果其他人正在阅读此内容并希望他们有一个Y数据框架可供使用,您可以轻松地创建一个模拟的包含带有ImageMagick的黑白渐变,如下所示:

convert -size 640x480 gradient: -depth 8 gray:y.raw

enter image description here

ls

会出现这种情况
-rw-r--r--   1 mark  staff  307200 23 Mar 10:05 y.raw