2 读取图像数据
2.2.1 使用matplotlib
库进行图像的读取
matplotlib
中的函数跟Matlab很像。
我们需要使用matplotlib.pyplot
中的函数:
imread(文件地址)
:进行读取图像的操作(参数为读取图像文件的路径)
imshow(数组)
:进行图像的显示操作(显示图像的数组)
show()
:显示一个窗口,用于显示图像(很多时候,不显示图像的话,是忘记使用这个函数)
我们尝试探讨,图像被读取后的数据类型,大小形状
import matplotlib.pyplot as plt
img = plt.imread('002.jpg')
#图片的高H为460,宽W为346,颜色通道C为3
print(img.shape)
print(img.dtype)
print(type(img))
plt.imshow(img)
plt.show()
输出为:
(460, 346, 3)
uint8
<class 'numpy.ndarray'>
结论:imread
读取的图片为numpy.ndarry
的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是uint8
,即每个数据的大小为[0,255]
如果不想手动进行多图像的读取,需要使用到Python的文件,路径操作等。暂不介绍
手动添加的话,就是用[array1,array2]
这种形式,将数组进行连接
import matplotlib.pyplot as plt
img1 = plt.imread('002.jpg')
img2 = plt.imread('003.jpg')
img = [img1, img2]
for i in img:
plt.imshow(i)
plt.show()
2.2.2 cv2
在cv2
库中,需要用到的函数有:
imread(文件地址)
:读取地址处的文件图像
imshow('窗口名称', 图像数组)
:将图像数组显示出来,但必须结合waitKey()
使用,否则无法显示图像
waitKey(延迟时间)
:需要设置延迟时间,当延迟时间≤0时,窗口将会一直延迟,延迟无穷长时间,按下任一按键,可以继续执行下面程序。当延迟时间>0,即窗口图像会显示对应毫秒后,自动消失。
import cv2
img1 = cv2.imread('002.jpg')
print(img1.shape)
print(img1.dtype)
print(type(img1))
cv2.imshow('img', img1)
cv2.waitKey(0) # 当延迟时间≤0时,窗口将会一直延迟
输出为:
(460, 346, 3)
uint8
<class 'numpy.ndarray'>
结论:imread读取的图片为
numpy.ndarry的数组,数组的大小排列为:高×宽×通道数,数组的数据类型是
uint8`,即每个数据的大小为[0,255]
Matplotlib与cv2对图像的数据格式的处理是相似的,但是也是有区别的:
对于通道的读取,cv2是按BGR的顺序读入,而matplotlib按RGB的顺序读入
2.2.3 PIL
PIL
全称为Python Image Library
。是给Python提供图像处理相关的库。
需要使用到的函数:
open(文件地址)
:打开文件,注意是打开,并没有读取。主要作用是保持检查文件地址,同时保证文件是打开的状态。当对图像处理的时候,会自动加载。
show()
:使用系统自带的图像查看器,查看图像
from PIL import Image
img1 = Image.open('002.jpg')
# 因为PIL有自己的数据结构,所以没有shape,dtype属性
# print(img1.shape)
# print(img1.dtype)
print(type(img1))
img1.show()
输出为:
<class 'PIL.JpegImagePlugin.JpegImageFile'>
我们可以使用numpy.array()
函数,将PIL
结构的数据转换成numpy
数组。
import matplotlib.pyplot as plt
from PIL import Image
import numpy as np
img1 = Image.open('002.jpg')
img1 = np.array(img1)
print(img1.shape)
print(img1.dtype)
plt.imshow(img1)
plt.show()
输出:
(460, 346, 3)
uint8
可以看到,PIL转换成numpy后,数据类型是uint8的。
总结:
主要介绍了使用matplotlib
,cv2
,PIL
库进行图像文件的读取
-
matplotlib
中的imread
,imshow
,show
函数 -
cv2
中的imread
,imshow
,waitKey
函数 -
PIL
中的open
,show
函数