Как читать изображение из буфера памяти (StringIO) или из url-адреса с библиотекой OpenCV python

просто поделитесь способом создания объекта изображения opencv из буфера памяти или из url-адреса для повышения производительности.

иногда мы получаем двоичный файл изображения из url, чтобы избежать дополнительного ввода-вывода файла, мы хотим imread это изображение из буфера памяти или из url, но imread поддерживает только чтение изображения из файловой системы с path.

1 ответов


чтобы создать объект изображения OpenCV с буфером памяти (StringIO), мы можем использовать imdecode API OpenCV, см. код ниже:

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)