欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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格式

 

 

相关标签: python