つまりなにしたの?
imreadでローカルの画像を読み込むことはできるけど、Webから引っ張ってきた画像は
保存したりなんなりとめんどくさいのでimread_webを作った。
環境について
% 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()
ぼくの好きな家系ラーメンにUmai IEKEIとOpenCVを使って書くことができました。