【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。。。深有体会,切记!!!

以上实验,整体代码截图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
感谢阅读,感恩相遇,让我们携手共进,一起创造美好的未来,加油!
感谢关注,感谢支持!微信扫一扫,让我感受一下,哈哈哈
在这里插入图片描述

参考:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

机器不学习我学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值