【CV】PIL库和Opencv库读取图片比较(踩坑记录)

本文主要介绍了如何使用PIL库和opencv库读取图片,并查看图片属性信息,并记录作者在项目过程中读取图片踩过的坑。

1. 安装所需环境
opencv-python==3.4.3
pillow==7.2.0
matplotlib==3.2.0

使用pip命令安装(conda命令也可以)

pip install opencv-python==3.4.3
pip install pillow==7.2.0
pip install matplotlib==3.2.0
2. 读取图片

现有一张图片如下:
[该图来源于图虫创意,侵权立删]

2.1. 使用opencv读取

使用opencv读取图片:

import cv2

img1 = cv2.imread('pic.jpg')
print(img1.shape)  # 查看图片信息
# (714,1069,3),高×宽×通道数,注意是高×宽
print(img1.shape[0])  # 图片高
print(img1.shape[1])  # 图片宽
print(img1.shape[2])  # 图片通道数
2.2. 使用PIL读取图片
from PIL import Image

img2 = Image.open('pic.jpg')
print(img2.mode) # 查看图片通道数
print(img2.size) # 图片宽×高
print(img2.size[0) # 图片宽
print(img2.size[1) # 图片高

注意,这里有一个坑,那就是两个库读取得到的通道数是不同的!!!暂时我是这么理解的,如果有误请指正。这也是为什么我要写这篇博文的原因。在实际项目中,遇到了读取图片导致维度不匹配的问题。

通过查找资料发现这和PIL库有关,PIL库对于图像位深度有一定的要求:
如果图片位深度为8,则读成灰度图,通道数为1;
如果图片位深度为24,通道数为3;
如果图片位深度为32,通道数为4;

以上是我的个人总结,从实际读取中发现的。

因此在有些开源的项目中,使用PIL读取图片后经常可以看到这样一行代码:

img = img.convert('RGB') # 将读取的图片转为RGB模式

絮叨,读完图请立刻进行转换,如果后面调用再转换,很可能会继续出现bug。。。深有体会,切记!!!

以上实验,整体代码截图如下:
【CV】PIL库和Opencv库读取图片比较(踩坑记录)_第1张图片
【CV】PIL库和Opencv库读取图片比较(踩坑记录)_第2张图片
【CV】PIL库和Opencv库读取图片比较(踩坑记录)_第3张图片
【CV】PIL库和Opencv库读取图片比较(踩坑记录)_第4张图片
感谢阅读,感恩相遇,让我们携手共进,一起创造美好的未来,加油!
感谢关注,感谢支持!微信扫一扫,让我感受一下,哈哈哈
【CV】PIL库和Opencv库读取图片比较(踩坑记录)_第5张图片

参考:
https://blog.csdn.net/z13653662052/article/details/105599394

https://blog.csdn.net/qq_27871973/article/details/84252488

https://blog.csdn.net/attackkk/article/details/93617845

https://www.zhihu.com/question/29807693

你可能感兴趣的:(python)