matplotlib、PIL、CV2操作图片
程序员文章站
2024-03-26 12:33:11
...
处理图像的方式有三种方式,分别使用PIL, matplotlib, CV2库
1、matplotlib读取和保存图片:
读取通道顺序:RGB
数据类型:numpy.ndarray
数据类型:对于png格式的图片,读取后的数据类型是float32, 0~1之间的小数,对于其他格式的图片,读取后的数据类型是uint8, 0~255
import matplotlib.pyplot as plt
#读取图片,读取通道的顺序是RGB
plt_img = plt.imread('./data/1.jpg') #uint8
#保存图片
plt.imsave('D:/data/3.png', plt_img) #类型可以是jpg或png
#显示彩色图片(三通道)
plt.imshow(plt_img)
#显示灰度图片(单通道)
plt.imshow(plt_img, cmap='gray') #如果不加cmap='gray',那么显示的是伪彩色
2、PIL读取和保存图片:
读取通道顺序:RGB
返回的数据类型:PIL,
转成numpy后的像素类型和大小:uint8, 0~255
from PIL import Image
import numpy as np
img_path = './data/1.jpg' #图片路径
#PIL读取图片
PIL_img = Image.open(img_path) #读取图片,读取通道是RGB,不用转换, 图片是PIL数据类型
#PIL保存图片
PIL_img.save('./data/2.jpg') #
#将PIL类型转成numpy类型, numpy数组格式(H,W,C=3)
np_img = np.asanyarray(PIL_img) #将PIL类型转成numpy类型,数据类型是uint8, (H, W, C)
#用PIL显示
PIL_img.show()
#用matplotlib.pyplot显示
plt.imshow(np_img) #读取通道是RGB, 不用转换
#将彩色图片转成灰度图片
s=np.array(PIL_img.convert('L'))
3、cv2读取和保存图片:
读取通道顺序:BRG,
数据类型:numpy.ndarray
像素类型:uint8, 0~255
import cv2
import numpy as np
#cv2读取图片,读取后的类型是numpy类型的数组, 读取的通道顺序是BRG
cv2_img = cv2.imread('./data/1.jpg') #numpy数组,元素类型是uinit8 0~255
#保存图片,第二个是numpy数组或mat数组,类型是jpg或png
cv2.imwrite('D:/data/1.jpg', cv2_img) #
#CV2显示图片,只能用来显示通道顺序为BRG的numpy数组,不然产生色差
cv2.imshow('labels',cv2_img)
cv2.waitKey(0)
#matplotlib.pyplot显示
plt.imshow(cv2_img[:,:,::-1]) #读取通道是BGR,所以[:,:,::-1]将其转换成RGB格式
下一篇: Matplotlib之基本操作