\

この記事では、PythonでOpenCVとBase64を使って画像を処理する方法について説明します。具体的には、画像をBase64形式に変換し、その後、Base64形式から画像に戻す方法を示します。

OpenCVとBase64を使って画像を変換する

まず、PillowのPIL.ImageからBase64文字列に変換する方法を見てみましょう。

import base64
from io import BytesIO
from PIL import Image

def pil_to_base64(img, format="jpeg"):
    buffer = BytesIO()
    img.save(buffer, format)
    img_str = base64.b64encode(buffer.getvalue()).decode("ascii")
    return img_str

# 画像を読み込む
img = Image.open("sample.jpg")

# base64 文字列 (jpeg) に変換する
img_base64 = pil_to_base64(img, format="jpeg")

次に、Base64文字列からPillowのPIL.Imageに変換する方法を見てみましょう。

def base64_to_pil(img_str):
    if "base64," in img_str:
        img_str = img_str.split(",")[1]
    img_raw = base64.b64decode(img_str)
    img = Image.open(BytesIO(img_raw))
    return img

# base64 文字列
img_base64 = "/9j/4AAQSkZJRgABAQEBLAEsAAD/4QEsRXhpZgAATU0AKgAAAAgABQEPAAIAAAAYAAAASgEQAAIAAAARAAAAYgESAAMAAAABAAEAAIKaAAUAAAABAAAAdIdpAAQAAAABAAAAf..."

# PIL.Image 形式に変換する
img = base64_to_pil(img_base64)

これで、PythonのPillowライブラリを使って画像をBase64形式に変換し、Base64形式から画像に戻す方法を学びました。

OpenCVとBase64を使って画像を変換する

次に、OpenCVを使って同じことを行う方法を見てみましょう。

import base64
import numpy as np
import cv2

# base64 to OpenCV Image
with open("test.jpg", "rb") as f:
    im_b64 = base64.b64encode(f.read())
im_bytes = base64.b64decode(im_b64)
im_arr = np.frombuffer(im_bytes, dtype=np.uint8)
img = cv2.imdecode(im_arr, flags=cv2.IMREAD_COLOR)

このコードは、まず画像を読み込み、それをBase64形式にエンコードします。次に、そのBase64エンコードされた文字列をデコードし、バイト配列に変換します。最後に、そのバイト配列をNumPy配列に変換し、それをOpenCVの画像(BGR形式)に変換します。

以上がPythonでOpenCVとBase64を使って画像を処理する方法です。これらのコードを使って、画像をBase64形式に変換し、その後、Base64形式から画像に戻すことができます。これは、画像をテキスト形式で保存したり、テキスト形式で送信したりする場合に非常に便利です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です