本文主要介绍了如何使用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