python 三种常用图像库opencv、matplotlib、PIL图片读取方式对比总结
作者:互联网
一.opencv: cv2
'cv2'
import cv2
import os
# im1 = cv2.imread(r'C:\Users\admin\Desktop\Celeba\celeba/000001.jpg')#对
# im1 = cv2.imread(r'C:\Users\admin\Desktop\Celeba\celeba')#报错,要明确到图片名
im1 = cv2.imread(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))#等同第3行
im2 = cv2.resize(im1,(200,200)) #默认双线性插值
cv2.imshow('abcd',im2)
cv2.waitKey(0) #无限期等待输入,按任意键结束
1.① opencv读进来的图片已经是一个numpy矩阵了!!!彩色图片维度是(高度,宽度,通道数)。数据类型是uint8
②opencv读进来的图片的通道排列是BGR,而不是主流的RGB
2.①img1 = cv2.imread(path) 读入图片
②cv2.imshow(winname, img1)显示图片:winname: 窗口名; image: 要显示的图片
③cv2.imwrite(name, img1)保存图片
④cv2.waitKey(0) 无限期等待输入,按任意键结束
⑤cv2.destroyAllWindows() 销毁所有创建的窗口
⑥cv2.resize( ),参数输入是 宽×高×通道
二.matplotlib : from matplotlib import pyplot as plt
'matplotlib'
import cv2
import os
from matplotlib import pyplot as plt
im1 = cv2.imread(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))
# im1 = plt.imread(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))#同上
"""createPlot = subplot(222)表示画布分成(2*2=4)个小区域,
并将图createPlot绘制在画布中的第二个子区域,也就是右上角位置。"""
#cv2的BGR格式
plt.subplot(121)
plt.imshow(im1)
plt.title('BGR')
#调为正常的BGR
plt.subplot(122)
im1_ = im1[:,:,::-1] #BGR -> RGB
plt.imshow(im1_)
plt.title('RGB')
'plt.imshow(img)是在图像上增加一个img,不负责显示。plt.show()才能显示'
plt.show()
#获取属性
print(im1.shape)
print(im1.size)
print(im1.dtype)
1. ①调用matplotlib进行图片展示时,需要注意调整图片的通道顺序。因为cv2读取图片的通道顺序是BGR,而matplotlib是RGB,故调用plt.imshow(img)前,必须将img的通道调整为RGB。
②plt.imshow(img)是在图像上增加一个img,不负责显示。plt.show()才能实现显示。
2.①img1 = plt.imread(path) 读入图片
②plt.imshow(img1)后,还需plt.show()来实现显示。
③plt.subplot(122),表示画布分成(1*2=2)个小区域, 并将图绘制在画布中的第二个子区域,也就是右上角位置。
三. PIL: from PIL import Image
'PIL Image'
from PIL import Image
import numpy as np
import os
im1 = Image.open(os.path.join(r'C:\Users\admin\Desktop\Celeba\celeba','000001.jpg'))
im1.show()
#除了cv2,其他库读进来的图片都不是矩阵,我们将图片转矩阵
arr = np.array(im1)
print(arr.shape)
print(arr.dtype)
#矩阵再转为图像
im2 = Image.fromarray(arr)
# im2.save('01.png')
1. 除了cv2,其他库读进来的图片都不是矩阵。所以我们经常在图片读进来后,先转为矩阵下的操作,之后再转回图片。
2.① img1 = Image.open(path) 读入图片
②img1.show() 直接显示图片
标签:plt,PIL,python,imshow,cv2,matplotlib,im1,import,图片 来源: https://blog.csdn.net/qq_39938666/article/details/87980832