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

2024-05-26 14:20:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 文件图像raw视频png格式平面jpg
1条回答
网友
1楼 · 发布于 2024-05-26 14:20:55

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

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

在终端的命令行执行ImageMagick

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

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

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

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

^{pr2}$

通过NetPBM PGM格式和Photoshop或GIMP

假设您没有ImageMagick,您可以将文件制作成NetPBMPGM便携式灰色地图),您可以在GIMPPaintfehAdobe 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

相关问题 更多 >

    热门问题