Python通过URL打开图片opencv / skimage / PIL
2023-09-27 14:29:08 时间
不论是用opencv还是PIL,skimage等库,在之前做图像处理的时候,几乎都是读取本地的图片。最近尝试爬虫爬取图片,在保存之前,我希望能先快速浏览一遍图片,然后有选择性的保存。这里就需要从url读取图片了。查了很多资料,发现有这么几种方法,这里做个记录。
本文用到的图片URL如下:
img_src = 'http://wx2.sinaimg.cn/mw690/ac38503ely1fesz8m0ov6j20qo140dix.jpg'
1.用OpenCV
OpenCV的imread()只能加载本地的图片,并不能通过网址加载图片。但是,opencv的VideoCapture类可以从url加载视频。如果只用opencv的话,我们可以一个迂回的方式:先用VideoCapure加载网址下的图片,然后再传给Mat。
import cv2
cap = cv2.VideoCapture(img_src)
if( cap.isOpened() ) :
ret,img = cap.read()
cv2.imshow("image",img)
cv2.waitKey()
2. OpenCV+Numpy+urllib
import numpy as np
import urllib
import cv2
resp = urllib.urlopen(img_src)
image = np.asarray(bytearray(resp.read()), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
cv2.imshow("Image", image)
cv2.waitKey(0)
urlopen返回 一个类文件对象,它提供了如下方法:
read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样。然后把返回的类文件对象重新编码,转换为图片传给Mat。
3.PIL+requests
import requests as req
from PIL import Image
from io import BytesIO
response = req.get(img_src)
image = Image.open(BytesIO(response.content))
image.show()
requests能以字节的方式访问请求响应体,以上就是以请求返回的二进制数据创建一张图片的代码。
4. skimage
from skimage import io
image = io.imread(img_src)
io.imshow(image)
io.show()
相对来说,这种方式应该是最简单的,因为skimage可以直接以imread()函数来读取网页图片,而不需要其他的辅助,也不需要迂回。
相关文章
- 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样
- Python图像处理丨如何调用OpenCV绘制直方图
- 显示一张图片(opencv-python入门)
- Python 调用API接口方式,通过http.client调用api接口,远程调用flask接口方式
- Python中的单例模式——装饰器实现剖析
- 第24天:Python 标准库概览2
- Python pip Unable--
- OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo
- python opencv 找到圆点标定板所有点后通过距离找两个角点6
- python opencv 找到圆点标定板所有点后通过距离找两个角点5
- python opencv图片合成视频
- python基础技巧总结(二)
- Python,OpenCV提取图片中的多个茄子种子轮廓,并按从左到右排序后显示
- 使用Python,OpenCV进行图像平移转换
- 使用Python,OpenCV从图像中删除轮廓
- 使用Python,OpenCV线程化方式提高视频FPS(每秒帧数)
- Python,OpenCV制作全透明图,简单的图片
- 使用Python,OpenCV构建透明的叠加层
- 第7.9节 案例详解:Python类封装
- 使用Python-OpenCV向图片添加噪声(高斯噪声、椒盐噪声)
- Integrating OpenCV python tool into one SKlearn MNIST example for supporting prediction
- python-opencv-图像的叠加
- python PIL 和opencv检测图片是否包含透明通道