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(path, 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()才能实现显示。

      注:plt.imshow(img)显示的图是带坐标的,不想要显示坐标,需跟着一行代码 plt.axis('off')

2.①img1 = plt.imread(path) 读入图片

   ②plt.imshow(img1)后,还需plt.show()来实现显示。

   ③plt.savefig(path)保存图片:在其前必须写plt.imshow(img1),否则保存图全是空白的。

   ④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) 读入图片

   ②PIL下,读入图片后都是对图片做直接操作。如:img1.show() 直接显示图片,img1.resize((w,h)),img1.save(path)等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值