在python中将字节文件转换为图像

时间:2014-06-20 15:55:05

标签: python image byte python-imaging-library

所以我有另一个程序输出的字节文件。该字节文件包含来自640x480分辨率的摄像机输出的单帧数据。我想将该文件读入python并将其转换为图像。

我和pil一起工作,但是当我尝试这样做时......

   def readimage(path):
      with open(path, "Ur") as f:
        return f.read()

   def main():
    bytes = readimage("color725.txt")
    image = Image.fromstring('RGB', (640,480), bytes)
    image.save("test.bmp")

我得到的图像不是我开始的图像。 (看起来像胡说八道)

当我尝试这样做时......

def readimage(path):
    with open(path, "rb") as f:
        return bytearray(f.read())

def main():
    bytes = readimage("color725.txt")
    image = Image.open(io.BytesIO(bytes))
    image.save("test.bmp")

我收到错误" IO错误:无法识别图像文件"。这不是文件存在或不存在的问题,因为它是图像命令抛出错误,而不是尝试打开文件。

这两次尝试基本上总结了我从文档中看到的内容。我见过的任何其他内容都不适用。我有什么简单的遗失,或者某种更好的方式吗?任何帮助找到问题的答案都将不胜感激。

字节文件的前几行为十六进制:

1010 1100 1010 1100 1111 1000 1211 1000 1413 1000 1212 1100 1013 1100 0f11 1200 0f11 1200 0f10 1300 0f10 1200 0f10 1200 1013 1300 1011 1400 1014 1500 0f12 1600 0f15 1500 1115 1500 1315 1400 1211 1300 1110 1100 100e 0f00 0f0c 0e00 0f0d 0d00 0f0d 0c00 0e0c 0c00 0e0c 0b00 0d0c 0b00 0c0d 0d00 0e0f 0f00 1010 1100 0e0e 1300 0c0c 0f00 0d0b 0b00 0e0a 0900 0c0a 0800 0b0a 0900 0909 0b00 0808 0900 0707 0800

1 个答案:

答案 0 :(得分:3)

所以看起来图像应该是原始的pivel值,格式可以是bgr32。但是PIL只知道以RGB格式加载图像。 如果这是真的,你可以尝试进行简单的字节操作,将初始字符串转换为RGB

如果字节顺序真的是蓝色,绿色,红色,0,你可以尝试(从你的初始代码开始)

bytes = readimage("color725.txt")
RGBbytes = ''.join([ bytes[i+2:i+3] + bytes[i+1:i+2] + bytes[i:i+1]
                   for i in range(0, len(bytes) -1, 4)])
image = Image.fromstring('RGB', (640,480), RGBbytes)

重新排序字节以纠正RGB顺序并删除第四个。