picamera在BytesIO流中保存重复的图片

时间:2017-08-31 14:25:17

标签: python python-imaging-library bytesio

所以这里的想法非常简单。我想通过BytesIO流和PIL从raspberry pi相机中获取并保存图片,这样我就可以在保存之前绘制到图像上。下面的代码很简单,但是在程序完成10张图片后,所有保存的图片都是相同的。

我确信有一种更简单的方法可以做到这一点,但我想使用BytesIO流来尝试了解更多信息。

import picamera, io
from PIL import Image

camera = picamera.PiCamera()
camera.resolution = (1920, 1080)
camera.color_effects = (128, 128)
stream = io.BytesIO()

for n in range(10):
    camera.capture(stream, "jpeg", use_video_port=True)
    stream.seek(0)
    im = Image.open(stream)
    im.save(str(n)+".jpg")
    print n
stream.close()

任何帮助将不胜感激, NIK

1 个答案:

答案 0 :(得分:-1)

代码的问题不是在每次捕获之前或读取捕获的图像之后寻求内存中文件对象的启动。但是,无论如何,使用io.BytesIOPIL.Image都是不必要的复杂。您可以直接捕获到文件:

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
import picamera


def main():
    with picamera.PiCamera() as camera:
        camera.resolution = (1920, 1080)
        camera.color_effects = (128, 128)

        for n in range(10):
            camera.capture('{0:04d}.jpg'.format(n), use_video_port=True)
            print(n)


if __name__ == '__main__':
    main()

这里我在PiCamera语句中使用了with对象,以确保在完成相机操作后正确关闭/释放此资源。