上面这些库都被广泛用于图像处理和计算机视觉任务;
不同的图像读取库(OpenCV,Pillow,matplotlib和skimage)的读取速度,是怎么样的一个情况?
下面分别从读取速度,以及转换到RGB通道的numpy格式两方面进行比较,
Python代码如下:
# 导入OpenCV库,用于处理图像
import cv2 # 从PIL库导入Image模块,用于处理图像
from PIL import Image # 导入time库,用于计算和记录时间
import time # 导入matplotlib.image模块,用于读取图像
import matplotlib.image as mpimg # mpimg 用于读取图片 # 导入numpy模块,用于对图像进行操作和处理
import numpy as np # 从skimage库导入io模块,用于读取图像
from skimage import io # 定义一个函数,名为opencv_i,用于测试OpenCV读取图像的速度
def opencv_i(): # 记录开始时间 st = time.time() # 使用OpenCV的imread函数读取图像,'./images.jpg'是图像文件的路径 img = cv2.imread("./images.jpg") # 打印从开始到读取图像完成所需的时间 print(f"cv2 read take time {time.time() - st} s") # 将读取的图像从BGR格式转换为RGB格式,BGR是OpenCV默认的色彩空间 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 记录结束时间 end = time.time() # 打印从开始到图像转换为RGB格式所需的总时间 print(f"opencv2 total take time {end - st} s,to rgb numpy format") # 定义一个函数,名为pillow_i,用于测试Pillow读取图像的速度
def pillow_i(): # 记录开始时间 st = time.time() # 使用Pillow的Image模块的open函数读取图像,'./images.jpg'是图像文件的路径 im = Image.open("./images.jpg") # 打印从开始到读取图像完成所需的时间 print(f"pillow read take time {time.time() - st} s") # 将Pillow的Image对象转换为numpy数组,以便后续进行数值操作 output = np.array(im) # 记录结束时间 end = time.time() # 打印从开始到转换为numpy数组所需的总时间,以及转换为RGB格式(numpy数组)的说明 print(f"pillow rgb numpy,total take time {end - st} s,to rgb numpy format") # 定义一个函数,名为matplot_i,用于测试matplotlib读取图像的速度
def matplot_i(): # 记录开始时间 st = time.time() # 使用matplotlib的imread函数读取图像,'./images.jpg'是图像文件的路径 lena = mpimg.imread('./images.jpg') # 记录结束时间 end = time.time() # 打印从开始到读取图像完成所需的时间,以及转换为RGB格式(numpy数组)的说明 print(f"matplot read take time {end - st} s,to rgb numpy format") # 定义一个函数,名为skimage_i,用于测试skimage读取图像的速度
def skimage_i(): # 记录开始时间 st = time.time() # 使用skimage的io模块的imread函数读取图像,'./images.jpg'是图像文件的路径 img = io.imread('images.jpg') # 记录结束时间 end = time.time() # 打印从开始到读取图像完成所需的时间,以及转换为RGB格式(numpy数组)的说明 print(f"skimage read take time {end - st} s,to rgb numpy format") # 打印30个破折号,用于分隔测试结果
print("-"*30)
# 调用opencv_i函数,测试OpenCV读取图像的速度并输出结果
opencv_i()
# 打印30个破折号,用于分隔测试结果
print("-"*30)
# 调用pillow_i函数,测试Pillow读取图像的速度并输出结果
pillow_i()
# 打印30个破折号,用于分隔测试结果
print("-"*30)
# 调用matplot_i函数,测试matplotlib读取图像的速度并输出结果
matplot_i()
# 打印30
运行结果如下:
从结果可以看到速度方面,opencv 最快,matplotlib 与 skimage库略微慢一点, pillow库相差的更多一点;
由于每个人的运行环境,图像大小,数量等因素的差异,本结果仅仅作为一个小小的参考;
个人水平有限,有问题随时联系;
欢迎一键三连~