树莓派(6):PIL vs Opencv

本文对比分析了PIL(Pillow)和Opencv在图像预处理中的性能,包括图片读取、resize及颜色空间转换。通过实验发现,两者在基本操作上的速度相近,但在复杂处理流程中,Opencv展现出更高的效率。

0.前言

最近在做关于图像预处理加速的东西,在部署深度学习方案要处理一些图像方面的问题的时候,是想要能够快速的进行图像读取和转换的库的。

我产生了一个疑问 —— Pillow 和 Opencv二者哪一个更好一些呢?于是我进行了一系列的测试。

1.简要介绍

1.1 PIL

PIL(Python Imaging Library)是Python一个强大方便的图像处理库,名气也比较大。不过只支持到Python 2.7。
Pillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。

PIL库可以完成图像归档和图像处理两方面功能需求:

(1)图像归档:对图像进行批处理、生成图像预览、图像格式转换等;
(2)图像处理:图像基本处理、像素处理、颜色处理等。

1.2 Opencv

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。

OpenCV用 C++ 语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以透过在线文档获取。现在也提供对于C#, Ch,Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现.

1.3 二者初始对比

从上述简要介绍来看,显然Opencv是一个更加强大和完善的库。而且,Opencv是C++语言,PIL是python,在效率方面应该是Opencv更有优势。

然而,在Pytorch中对于图像的读取变换均用的PIL——
在这里插入图片描述
图片来源:https://pytorch.org/docs/0.2.0/_modules/torchvision/transforms.html

是更加方便还是效率更高?

2.准备工作

由于我的预处理加速要在树莓派上进行,我的以下工作均是在树莓派4B上完成的。

2.1 平台信息

树莓派CPU信息如下:
在这里插入图片描述

2.2 安装PIL和Opencv

安装PIL:pip install pillow
安装Opencv:方法见树莓派(4):树莓派python3安装opencv
另外再安装一下matplotlib:sudo apt-get install python3-matplotlib(注:我用sudo pip install matplotlib没有成功)

2.3 查看版本信息

查看版本
在这里插入图片描述
运行代码

import PIL
import cv2

print("---PIL---")
print("PIL version is " + PIL.__version__)
print(PIL.__spec__)
print("---cv2---")
print("Opencv version is " + cv2.__version__)
print(cv2.__spec__)

输出结果为

---PIL---
PIL version is 5.4.1
ModuleSpec(name='PIL', loader=<_frozen_importlib_external.SourceFileLoader object at 0xb665bb10>, origin='/usr/lib/python3/dist-packages/PIL/__init__.py', submodule_search_locations=['/usr/lib/python3/dist-packages/PIL'])
---cv2---
Opencv version is 3.4.6
ModuleSpec(name='cv2.cv2', loader=<_frozen_importlib_external.ExtensionFileLoader object at 0xb65ff450>, origin='/home/pi/.local/lib/python3.7/site-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so')

2.4 验证安装成功

看一下能不能分别用PIL和Opencv查看图片——
验证代码为

import PIL
import cv2
import time
import numpy as np
from PIL import Image,ImageOps
import matplotlib.pylab as plt

def stage_1_PIL(filename):
    img_pil = Image.open(filename)
    img_pil = img_pil.resize((416,416))
    return np.asarray(img_pil)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值