洞察移动政务小程序助力政府数字化转型,保障数据安全和效率提升
734
2022-09-10
【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其(python爬虫)
一、背景
本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率。见全网并无较完整的效率对比文档,遂决定自己丰衣足食。
二、目的
本篇文章将对Python下的opencv接口函数及PIL(Pillow)函数的常用部分进行逐个运行并计时(多次测算取平均时间和最短时间,次数一般在100次以上),并简单使用numba、ctypes、cython等方法优化代码。
三、测试方法及环境
1.硬件
CPU:Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz 3.30 GHz
内存:4.00 GB
硬盘:ATA WDC WD5000AAKX-7 SCSI Disk Device
2.软件:
操作系统:Windows 7 Service Pack 1 Ultimate 64bit zh-cn
Python解释器:3.7.5 64bit (provided by Anaconda)
各模块:皆为最新
(事情有所变化,暂时使用下面机房电脑的配置进行测试)
1.硬件
CPU:Intel(R) Xeon(R) Silver 4116 CPU @ 2.10GHz 2.10 GHz
内存:3.00 GB
硬盘:VMware Virtual disk SCSI Disk Service
2.软件:
操作系统:Windows 7 Service Pack 1 Ultimate 64bit zh-cn (powered by VMware Horizon View Client)
Python解释器:3.7.3 64bit (provided by Anaconda)
各模块:皆为最新
四、具体实现
1.待测试函数
以下定义新建的视频规定为MP4格式、mp4v编码、1920*1080尺寸、60帧速率;定义新建的图片为JPG格式、1920*1080尺寸、RGB通道。
根据实际需要(其实是我自己的需要),先暂定测试以下函数[1][2]:
1)创建视频
2)视频帧读取(视频不好做测试数据,故使用了手头上现成的。in.mp4参数:时长27秒,尺寸1920x1080,数据速率17073kbps,总比特率17331kbps,帧速率29fps,大小55.7MB)
3)视频帧写入[3] (PS:为什么Opencv官方教程中没有这个函数...)
4)写入视频(后来发现这个应该类似于file.close(),只是一个释放文件对象的过程,并不是真的在这个时候写入所有的数据。之前看见在release之前文件是空的应该是数据还没有从内存写入磁盘导致的)
5)创建图片 ( matrix & pillow object )
6)图片读取(opencv & pillow)(使用新建的图片,满足上面的定义,大小33kb)
7)图片数据结构转换
8)图片点操作(matrix & pillow object )
9)图片其他绘图操作(matrix & pillow object & opencv )
这里我们测试画直线、画矩形、画圆(不包括matrix)、画椭圆操作(不包括matrix)、绘制文字(不包括matrix)。
注:pillow中默认绘制的图形都是实心的[4],而opencv要设置线宽为负值才是实心的[5]。
其中opencv的字体参数参考:[6]
10)图片其他操作
11)写入图片( Pillow & OpenCV)
2.时间计算工具
这里的时间计算工具用一个类实现给定次数的循环和智能循环(自动控制循环次数)的功能,并能给出每次循环的函数返回值、循环次数、平均时间、最短时间、最长时间、总共用时。
对于自动判断循环次数的算法参考了Python的timeit模块源码(autorange函数)[7]:
测试结果(将整个文件作为模块以op为名字调用):
3.完整代码
共3页: 上一页123下一页
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~