Подтвердить что ты не робот

Как читать изображение из буфера памяти (StringIO) или из url с помощью библиотеки opencv python

Просто используйте способ создания объекта изображения opencv из буфера памяти или URL-адреса, чтобы повысить производительность.

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

4b9b3361

Ответ 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)