比较opencv,pillow,matplotlib,skimage读取图像的速度比

上面这些库都被广泛用于图像处理和计算机视觉任务;

不同的图像读取库(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库相差的更多一点;

由于每个人的运行环境,图像大小,数量等因素的差异,本结果仅仅作为一个小小的参考;

个人水平有限,有问题随时联系;

欢迎一键三连~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/67014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《虚拟仿真实验教学平台》三项团体标准启动会在 ALVA 举办

8 月 11 日,《虚拟仿真实验教学平台》三项团体标准启动会(下以“启动会”简称)以线下线上相结合的会议形式在 ALVA Systems 北京总部举办。 启动会上,ALVA 与专家组、编写组成员和企业代表围绕《虚拟仿真实验教学平台建设指南》、…

不同写法的性能差异

“ 达到相同目的,可以有多种写法,每种写法有性能、可读性方面的区别,本文旨在探讨不同写法之间的性能差异 len(str) vs str "" 本部分参考自: [问个 Go 问题,字符串 len 0 和 字符串 "" ,有啥区别?](https://segmentf…

18 Linux之Python定制篇-Python开发平台Ubuntu

18 Linux之Python定制篇-Python开发平台Ubuntu 文章目录 18 Linux之Python定制篇-Python开发平台Ubuntu18.1 安装Ubuntu虚拟机18.4 Ubuntu的root用户18.5 Ubuntu下开发Python 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&…

使用iOS应用程序进行数据采集:从入门到实践

随着移动互联网的普及,越来越多的数据产生于移动设备。为了更好地了解用户行为、优化产品体验,我们需要在iOS应用程序中进行数据采集。本文将指导您如何在iOS应用中实现数据采集,从基本概念到实际操作。 数据采集的基本概念与方法 a. 数据采集…

docker内部ip与内网其它ip网段冲突导致无法访问的解决方法

现象: 宿主机和docker内部能互相访问非常正常,但docker内部访问外部网络内网其中一个网段172.18.0.x则无法访问。 排查 由于docker是精简过的系统,需另外安装网络相关命令 首先更新apt-get,否则在apt-get install 命令时会报E:…

剑指 Offer 10- I. 斐波那契数列

剑指 Offer 10- I. 斐波那契数列 方法一 class Solution {int mod (int) 1e9 7;public int fib(int n) {if(n < 1) return n;int[] dp new int[n 1];dp[1] 1;for(int i 2; i < n; i){dp[i] (dp[i - 1] dp[i - 2]) % mod;}return dp[n];} }方法二 对方法一进行…

景区洗手间生活污水处理设备厂家电话

诸城市鑫淼环保小编带大家了解一下景区洗手间生活污水处理设备厂家电话 MBR生活污水处理设备构造介绍&#xff1a; mbr一体化污水处理的设计主要是对生活污水和相类似的工业有机污水的处理&#xff0c;其主要处理手段是采用目前较为成熟的生化处理技术接触氧化法&#xff0c;水…

el-table滚动加载、懒加载(自定义指令)

我们在实际工作中会遇到这样的问题&#xff1a; 应客户要求&#xff0c;某一个列表不允许分页。但是不分页的话&#xff0c;如果遇到大量的数据加载&#xff0c;不但后端响应速度变慢&#xff0c;前端的渲染效率也会降低&#xff0c;页面出现明显的卡顿。 那如何解决这个问题…

基础算法-递推算法-学习

现象&#xff1a; 基础算法-递推算法-学习 方法&#xff1a; 这就是一种递推的算法思想。递推思想的核心就是从已知条件出发&#xff0c;逐步推算出问题的解 最常见案例&#xff1a; 一&#xff1a;正向递推案例&#xff1a; 弹力球回弹问题&#xff1a; * 弹力球从100米高…

OpenLayers7官方文档翻译,OpenLayers7中文文档,OpenLayers快速入门

快速入门 这个入门文档向您展示如何放一张地图在web网页上。 开发设置使用 NodeJS&#xff08;至少需要Nodejs 14 或更高版本&#xff09;&#xff0c;并要求安装 git。 设置新项目 开始使用OpenLayers构建项目的最简单方法是运行&#xff1a;npm create ol-app npm create…

在ubuntu下远程链接仓库gitte/github

后期适当加点图片&#xff0c;提高可读性。 本教程是最基础的连接教程&#xff0c;设计git的操作也仅仅局限于push/pull&#xff0c;如果想全面了解&#xff0c;可以参考廖雪峰git教程 在Ubuntu上初始化本地Git仓库并链接到远程Gitee仓库(github同理)&#xff0c;需要按照以下步…

Go 面向对象(匿名字段)

概述 严格意义上说&#xff0c;GO语言中没有类(class)的概念,但是我们可以将结构体比作为类&#xff0c;因为在结构体中可以添加属性&#xff08;成员&#xff09;&#xff0c;方法&#xff08;函数&#xff09;。 面向对象编程的好处比较多&#xff0c;我们先来说一下“继承…

音视频 ffmpeg命令提取PCM数据

提取PCM ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -sample_fmt s16 out_s16.wav ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -codec:a pcm_s16le out2_s16le.wav ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f…

QWidget的ui界面绘制成图片

文章目录 源文件源码解释效果修复图片清晰度 源文件 #include "widget.h" #include "ui_widget.h"#include <QPixmap> #include <QDir>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);// 构造…

Pinely Round 2 (Div. 1 + Div. 2) G. Swaps(组合计数)

题目 给定一个长度为n(n<1e6)的序列&#xff0c;第i个数ai(1<ai<n)&#xff0c; 操作&#xff1a;你可以将当前i位置的数和a[i]位置的数交换 交换可以操作任意次&#xff0c;求所有本质不同的数组的数量&#xff0c;答案对1e97取模 思路来源 力扣群 潼神 心得 感…

Android之布局转圆角

Android之布局转圆角 文章目录 Android之布局转圆角说明一、效果图二、实现步骤1.自定义RoundRelativeLayout2.使用 总结 说明 很多需求比较无语&#xff0c;需要某个布局转圆角&#xff0c;像个显眼包一样&#xff0c;所以为了满足显眼包&#xff0c;必须整呐提示&#xff1a…

Java智慧工地信息化管理平台源码,依托计算机信息、网络通讯、物联网、系统集成及云计算技术建立

Java智慧工地源码 智慧工地APP源码 系统定义&#xff1a; 智慧工地信息化管理平台是依托计算机信息、网络通讯、物联网、系统集成及云计算技术&#xff0c;通过数据采集、信息动态交互、智能分析&#xff0c;建立起来的一套集成的项目建设综合管理系统。实现项目管理信息化、网…

LeetCode 剑指offer 09.用两个栈实现队列

LeetCode 剑指offer 09.用两个栈实现队列 题目描述 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回…

消息队列-------Rabbitmq介绍和安装

1.消息队列介绍 消息队列就是基础数据结构中的“先进先出”的一种数据机构。想一下&#xff0c;生活中买东西&#xff0c;需要排队&#xff0c;先排的人先买消费&#xff0c;就是典型的“先进先出” 2.消息队列MQ可以解决的问题 MQ是一直存在&#xff0c;不过随着微服务架构…

C语言网络编程实现组播(多播)

1、组播IP划分 224.0.0.0&#xff5e;224.0.0.255 为预留的组播地址&#xff08;永久组地址&#xff09;&#xff0c;地址224.0.0.0保留不做分配&#xff0c;其它地址供路由协议使用&#xff1b; 224.0.1.0&#xff5e;224.0.1.255 是公用组播地址&#xff0c;可以用于Inter…