OpenCV открыть изображение с URL-адресом

#python #python-3.x #opencv

#питон #python-3.x #opencv

Вопрос:

Я продолжаю получать сообщение об ошибке при запуске приведенного ниже кода

 import cv2
import urllib3 as urllib
import requests
import numpy as np

url = "https://external-content.duckduckgo.com/iu/?u=https://wallup.net/wp-content/uploads/2016/03/10/343179-landscape-nature.jpg"

r = requests.get(url)

imgar = np.array(bytearray(r.text,'utf-8'),dtype=np.uint8)
img = cv2.imdecode(imgar,-1)
cv2.imshow('img',img)
cv2.waitKey()
 

Ошибка:

 cv2.imshow('img',img)
cv2.error: OpenCV(4.5.1) C:UsersappveyorAppDataLocalTemp1pip-req-build-kh7iq4w7opencvmoduleshighguisrcwindow.cpp:376: error: (-215:Assertion failed) size.width>0 amp;amp; size.height>0 in function 'cv::imshow'
 

Эта ошибка продолжает возникать независимо от того, на что я меняю фотографию, и я не уверен, почему, спасибо

Комментарии:

1. cv2.Видеосъемка должна работать. Или загрузите файл во временную папку и откройте с помощью imread

Ответ №1:

urllib.request.urlopen() это правильный способ загрузки мультимедиа при работе с. opecv-python

 import cv2
import urllib.request
import numpy as np
url = "https://external-content.duckduckgo.com/iu/?u=https://wallup.net/wp-content/uploads/2016/03/10/343179-landscape-nature.jpg"
url_response = urllib.request.urlopen(url)
img = cv2.imdecode(np.array(bytearray(url_response.read()), dtype=np.uint8), -1)

 

Ответ №2:

Вы можете попробовать это:

 import urllib.request
url_response = urllib.request.urlopen(url)
img_array = np.array(bytearray(url_response.read()), dtype=np.uint8)
img = cv2.imdecode(img_array, -1)
cv2.imshow('URL Image', img)
cv2.waitKey()
 

Альтернативный способ:

 import cv2
import urllib3 as urllib
import requests
import numpy as np
import io
import PIL
url = "https://s3-us-west-2.amazonaws.com/uw-s3-cdn/wp-content/uploads/sites/6/2017/11/04133712/waterfall-750x500.jpg"
r = requests.get(url)

response = requests.get(url)
image_bytes = io.BytesIO(response.content)
img = PIL.Image.open(image_bytes)
img.show()
 

Комментарии:

1. Я получил второй метод для работы, спасибо 🙂