有时候我们需要读取的图片是网络上的图片,应该怎么操作呢?
这里也是介绍两个常用库的做法,即 opencv
和 PIL
。
这里要读取的网络图片,来自上一篇文章:每日一学:如何用matplotlib展示图片:
链接为:https://mmbiz.qpic.cn/mmbiz_png/COhkzD7Mia5mH0pmJ9hdpSBT7x40CVuaPhcWqyiczL37icQs4JTm5px5dbBTwjof5k9ZcGgrtDwzFuiaW4iaQicGmbIA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1
代码如下所示:
# 基于 PIL
import requests
from PIL import Image
from io import BytesIO
%matplotlib inline
import matplotlib.pyplot as plt
img_url = 'https://mmbiz.qpic.cn/mmbiz_png/COhkzD7Mia5mH0pmJ9hdpSBT7x40CVuaPhcWqyiczL37icQs4JTm5px5dbBTwjof5k9ZcGgrtDwzFuiaW4iaQicGmbIA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1'
try:
encoded_img = requests.get(img_url).content
ori_img = Image.open(BytesIO(encoded_img))
plt.imshow(ori_img)
except Exception as e:
print(f'download image {img_url} error: {e}')
结果如下所示:
代码如下所示:
# opencv
import numpy as np
import cv2
import requests
%matplotlib inline
import matplotlib.pyplot as plt
try:
img_url = 'https://mmbiz.qpic.cn/mmbiz_png/COhkzD7Mia5mH0pmJ9hdpSBT7x40CVuaPhcWqyiczL37icQs4JTm5px5dbBTwjof5k9ZcGgrtDwzFuiaW4iaQicGmbIA/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1'
img_data = requests.get(img_url).content
img = np.asarray(bytearray(img_data), dtype="uint8")
img = cv2.imdecode(img, -1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
except Exception as e:
print(f'download image {img_url} error: {e}')
结果如下所示: