パフォーマンスを向上させるために、メモリバッファ内またはURLからopencvイメージオブジェクトを作成する方法を共有するだけです。
追加のファイルIOを回避するために、URLから画像バイナリを取得することがあります。この画像をメモリバッファまたはURLから読み直したいのですが、imreadはパスを使用したファイルシステムからの画像の読み取りのみをサポートします。
メモリバッファ(StringIO)内でOpenCVイメージオブジェクトを作成するには、OpenCVAPIimdecodeを使用できます。以下のコードを参照してください。
import cv2
import numpy as np
from urllib2 import urlopen
from cStringIO import StringIO
def create_opencv_image_from_stringio(img_stream, cv2_img_flag=0):
img_stream.seek(0)
img_array = np.asarray(bytearray(img_stream.read()), dtype=np.uint8)
return cv2.imdecode(img_array, cv2_img_flag)
def create_opencv_image_from_url(url, cv2_img_flag=0):
request = urlopen(url)
img_array = np.asarray(bytearray(request.read()), dtype=np.uint8)
return cv2.imdecode(img_array, cv2_img_flag)