Открыть загруженный образ в python opencv из переменной вместо файла - PullRequest
1 голос
/ 11 октября 2019

Я хочу загрузить в opencv изображение, которое я скачал. Я хотел бы избежать сохранения его в файл. Я прекрасно могу загрузить изображение:

page_html = requests.get("http://my_web_page.com")

image_src = parse.search('<img id="my_image" src="{}"', page_html.content.decode('utf-8'))[0]
if image_src:
    image = requests.get("http://my_web_age.com" + image_src).content

И я могу сохранить его в файл и проверить его с помощью проводника:

with open('main_image.png', 'wb') as file:
    file.write(image.content)

Но если я попытаюсь загрузить изображение напрямуюиз содержимого переменной он не работает:

cv2_image = cv2.imread(image.content, cv2.IMREAD_COLOR)

Я получаю:

SystemError: <built-in function imread> returned NULL without setting an error

Тем не менее чтение из файла работает, но можно ли пропустить этот шаг? Данные уже находятся в переменной, поэтому это должно быть возможно.

1 Ответ

1 голос
/ 11 октября 2019

Вы можете использовать numpy's frombuffer для преобразования данных в целые числа. imdecode затем превращает его в массив изображений, который вы используете с opencv.

Рабочий пример:

    import cv2
    import numpy as np
    import requests

    # perform request
    response =  requests.get('https://opencv-python-tutroals.readthedocs.io/en/latest/_images/messiup.jpg').content
    # convert to array of ints
    nparr = np.frombuffer(response, np.uint8)
    # convert to image array
    img = cv2.imdecode(nparr,cv2.IMREAD_UNCHANGED)

    # showimage
    cv2.imshow("Res", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...