编程语言
首页 > 编程语言> > python 三种常用图像库opencv、matplotlib、PIL图片读取方式对比总结

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