如何保存通过 camera.capture_continuous(格式 rgb)读取的图像并将其保存到文件

How to save an image read via camera.capture_continuous (format rgb) and save it to a file

我通过 camera.capture_continuous(stream,format='rgb', use_video_port=True, resize=(width, height) 读取 raspi 摄像头,将其馈送到珊瑚边缘 USB加速器。这非常有效。但现在我想将某些图像(取决于分析)保存到硬盘。

我是 python 初学者... file.write 没用。我假设是因为我得到了某种原始 rgb 图像数据而不是 jpg。

我希望能够将图像存储为 jpg。谁能建议使用什么功能?

更新

我尝试了以下方法

import argparse
import os
import io
import time
from collections import deque
import numpy as np
import picamera
from PIL import Image
import edgetpu.classification.engine

def main():

  stream = io.BytesIO()
  engine = edgetpu.classification.engine.ClassificationEngine(args.model)

  for foo in camera.capture_continuous(stream,
                                       format='rgb',
                                       use_video_port=True,
                                       resize=(width, height)):
      stream.truncate()
      stream.seek(0)
      input = np.frombuffer(stream.getvalue(), dtype=np.uint8)
      results = engine.ClassifyWithInputTensor(input, top_k=3)

      ...

      image = Image.fromarray(input.astype('uint8'), 'RGB')
      image.save("imgs/image_" + str(i) + ".jpg")

但只得到一个错误:

Traceback (most recent call last):
  File "mio.py", line 85, in <module>
    main()
  File "mio.py", line 75, in main
    image = Image.fromarray(input.astype('uint8'), 'RGB')
  File "/usr/lib/python3/dist-packages/PIL/Image.py", line 2529, in fromarray
    size = shape[1], shape[0]
IndexError: tuple index out of range

我做错了什么?

您可以使用 Pillow 库将图像保存到磁盘。类似于:

pip install Pillow numpy

import numpy as np
from PIL import Image
pixels = np.array([[[255, 0, 0], [0, 255, 0]], [[0, 0, 255], [255, 255, 0]]])
image = Image.fromarray(pixels.astype('uint8'), 'RGB')
image.save('out.jpg')

用下面一行解决了

image = Image.frombuffer('RGB', (width,height), streamValue)