【发布时间】:2023-04-06 00:36:01
【问题描述】:
我正在尝试从 url 读取图像。
为此,我创建了下面的函数。对于我输入的某些 url,它完全按照我的意愿工作,但对于其他人,它不会。在这种情况下,cv2.imread(img, cv2.IMREAD_COLOR) 函数返回 none。
我的代码:
import cv2
from urllib.request import Request, urlopen
import numpy as np
def urlToImage(url):
# download image,convert to a NumPy array,and read it into opencv
req = Request(
url,
headers={'User-Agent': 'Mozilla5.0(Google spider)', 'Range': 'bytes=0-{}'.format(5000)})
resp = urlopen(req)
img = np.asarray(bytearray(resp.read()), dtype="uint8")
img = cv2.imdecode(img, cv2.IMREAD_COLOR)
# return the image
return img
img = urlToImage('https://my_image.jpg')
print(img)
有效的网址示例:
"https://image.freepik.com/fotos-gratis/paisagem-ambiente-bonito-de-campo-verde_29332-1855.jpg"
无效的网址示例:
"https://veja.abril.com.br/wp-content/uploads/2019/03/tecnologia-samsung-s10-01.jpg"
我在这里做错了什么?
【问题讨论】:
-
尝试查看从 np.asarray 返回的 img。看它的形状。它看起来像彩色图像吗?
-
此行返回一个不代表颜色的代码。老实说,我不知道它们的意思,这是一个示例: [255, 216, 255, 219, 0, 67, 0, 1, 1, 1, 1....] cv2.imdecode 应该获取每个数字并转换为一个 BGR 数组