EnsekiTT Blog

EnsekiTTが書くブログです。

Webから引っ張ってきた画像をOpenCVで処理して表示する話

つまりなにしたの?

imreadでローカルの画像を読み込むことはできるけど、Webから引っ張ってきた画像は
保存したりなんなりとめんどくさいのでimread_webを作った。

f:id:ensekitt:20180716213340j:plain

環境について

 % python --version
Python 3.6.4
 % pip freeze | grep opencv
opencv-contrib-python==3.4.0.12
opencv-python==3.4.0.12
 % pip freeze | grep matplot
matplotlib==2.1.2

大まかな手順

  • Requestで画像をとってくる
  • tempfileで保存する
  • OpenCVで読み込む
  • 表示なり保存なりする

tempfileは処理中だけ保存してくれる便利なやつ
11.6. tempfile — 一時ファイルやディレクトリの作成 — Python 3.6.5 ドキュメント

コード

import io
import tempfile
import requests
import cv2
from matplotlib import pyplot as plt

def imread_web(url):
    # 画像をリクエストする
    res = requests.get(url)
    img = None
    # Tempfileを作成して即読み込む
    with tempfile.NamedTemporaryFile(dir='./') as fp:
        fp.write(res.content)
        fp.file.seek(0)
        img = cv2.imread(fp.name)
    return img

if __name__ == "__main__":
    url = 'https://s3.amazonaws.com/ensekitt-public/IEKEI.JPG'
    raw_img = imread_web(url)
    # BGRで読み込んじゃうのでMatplotlibで表示するために
    raw_img = cv2.cvtColor(raw_img, cv2.COLOR_BGR2RGB)
    # OpenCV的な処理をするところ
    edited_img = cv2.putText(raw_img, 'Umai IEKEI', (0,50), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255,0), 3, cv2.LINE_AA)

    plt.imshow(edited_img)
    plt.show()

f:id:ensekitt:20180716213044p:plain
ぼくの好きな家系ラーメンにUmai IEKEIとOpenCVを使って書くことができました。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。