【问题标题】:Cannot identify image file io.BytesIO on raspberry Pi using PiCamera library and PIL无法使用 PiCamera 库和 PIL 识别树莓派上的图像文件 io.BytesIO
【发布时间】:2020-06-06 22:20:32
【问题描述】:

我在使用 PiCamera 捕获函数的输出(指向 BytesIO 流)并使用 PIL 库打开它时遇到问题。下面是代码(基于PiCamera basic examples):

#Camera stuff
camera = PiCamera()
camera.resolution = (640, 480)
stream = io.BytesIO()
sleep(2)

try:
    for frame in camera.capture_continuous(stream, format = "jpeg", use_video_port = True):
        frame.seek(0)
        image = Image.open(frame) //THIS IS WHERE IS CRASHES
        #OTHER STUFF THAT IS NON IMPORTANT GOES HERE
        frame.truncate(0)
finally:
    camera.close()
    stream.close()

错误是:PIL.UnidentifiedImageError: cannot identify image file <_io.BytesIO object at 0xaa01cf00>

任何帮助将不胜感激:)

祝你有美好的一天!

【问题讨论】:

    标签: raspberry-pi python-imaging-library bytesio picamera


    【解决方案1】:

    问题很简单,但我想知道为什么 io 库会这样工作。 只需要在截断流后将流返回到 0 或搜索到 0,然后简单地调用不带参数的 truncate (所有在你完成打开图像之后)。像这样:

    for frame in camera.capture_continuous(stream, format = "jpeg", use_video_port = True):
        stream.seek(0)
        image = Image.open(stream)
        #Do stuff with image
        stream.seek(0)
        stream.truncate()
    

    基本上,当您打开图像并对其进行一些操作时,BytesIO 的指针可以四处移动并最终到达零位置以外的其他位置。之后,当您调用 truncate(0) 时,它不会像我想的那样将指针移回零(对我来说,将指针移回发生截断的位置似乎是合乎逻辑的)。当代码再次运行时,捕获写入流中,但这次它没有从头开始写入,之后一切都中断了。

    希望这可以帮助将来的人:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多