0

所以这里的想法很简单。我想通过 BytesIO 流和 PIL 从树莓派相机中拍摄和保存图片,这样我就可以在保存之前绘制到图像上。下面的代码很简单,但是程序完成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()

任何帮助将不胜感激,尼克

4

1 回答 1

-1

您的代码的问题不是在每次捕获之前或读取捕获的图像之后寻找内存文件对象的开头。但是无论如何,使用io.BytesIOandPIL.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以确保在完成相机操作后正确关闭/释放该资源。

于 2017-09-03T11:31:48.397 回答