cv2、PIL、matplotlib 读取图片的区别和联系

1.cv2
用cv2读取图片是按BGR的顺序读的,若需要转换成RGB时,有以下三种方法。
第一种方式,利用cv2的merge函数手动去合并。

b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b]) # cv2是按BGR进行读取的,所以要PIL进行展示时,需要进行变换
plt.imshow(img2) # PIL是按RGB进行读取的
plt.show()

即先把它划分成bgr的形式,再把它合并成RGB,得到适宜用plt表示的变量img2。
第二种方式,利用cv2提供的BGR2RGB方式:

img3=cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img3)
plt.show()

这种方式是opencv对调颜色通道的函数,可以直接调用,比较方便。
第三种方式,翻转numpy矩阵。这种做法不太直观,平时建议不要这么使用。但是很有学习的必要,因为对于矩阵操作的时候,进行翻转是很常见的。因此有必要学习下:

img4=img[:,:,::-1]
plt.imshow(img4)
plt.show()

2.PIL
读取图片的结果是一个对象,不是数组,用np.asarray或者np.array可以把图片转换成数组,PIL是按RGB进行读取的。

3.matplotlib
读取png图片时会出错。需要在参数里加个0.
img2 = mpimg.imread('../11.png',0)
4.总体代码实现:

import cv2  # 按BGR进行读取的图片,结果是数组
from PIL import Image # 读取图片的结果是一个对象,不是数组,用np.asarray或者np.array把图片转换成数组,把RGB读取
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片 按照RGB读取的图片,结果是数组

# cv2
img0 = cv2.imread('../11.png')
print("img0:","\n",img0)
print(img0.shape)
# 把cv2的BGR改为RGEB的三种方法
# 第一种
b,g,r=cv2.split(img0)
img00 = cv2.merge([b,g,r])
print("bgr:","\n",b,g,r,img00.shape)
img000=cv2.merge([r,g,b])
print("rgb","\n",img000,img000.shape)
plt.imshow(img000)
plt.show()
# 第二种
img3=cv2.cvtColor(img0, cv2.COLOR_BGR2RGB)
plt.imshow(img3)
plt.show()
# 第三种
img4=img0[:,:,::-1]
plt.imshow(img4)
plt.show()

# PIL
img1 = Image.open('../11.png')
img11 = np.array(img1) # 图片转化为数组
img111 = Image.fromarray(np.uint8(img1)).convert('RGB') # 把数组转化成图片 它只能保存uint8类型的数据
img111.save('./112.png') # 另存为图片
print("img1:",img1)
print(img11.shape)

# matplotlib
img2 = mpimg.imread('../11.png',0) # 因为当matplotlib读取png的时候,没有alpha通道
print("img2:","\n",img2)
print(img2.shape)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值