🐶

画像データ 型変換 【Python】

2021/10/27に公開

概要

Pythonにて画像データを扱うとき、「numpy(opencv)」「pillow」「byte」にて扱うことがある。それぞれの型変換させるための備忘録。
qiitaの記事を移行。

numpy -> bytes

_, num_bytes = cv2.imencode('.jpeg', num_numpy)
num_bytes = num_bytes.tobytes()

numpy -> pil

num_pil = Image.fromarray(num_numpy)

pil -> bytes

num_byteio = io.BytesIO()
num_byteio.save(num_pil, format='png')# 仮にpngにしている
num_bytes = num_byteio.getvalue()

試してないけど、以下でのできるらしい。
Image module内にtobyte()関数があるみたいだけど、上のスニペットがなぜか多い。
上だとフォーマット指定もできるからかもしれない。

num_bytes = num_pil.tobyte()

pil -> numpy

num_numpy = np.asarray(num_pil)

bytes -> numpy

num_byteio = io.BytesIO(num_bytes)
with Image.open(num_byteio) as img:
  num_numpy = np.asarray(img)

bytes -> pil

num_byteio = io.BytesIO(num_bytes)
num_pil = Image.open(num_byteio)

Discussion