cv2.imread和Image.open的差异

opencv的库cv2和PIL中的Image都可以用于读取和保存图片

import cv2
from PIL import Image
import matplotlib.pyplot as plt

img1=cv2.imread('dog.jpg')
img2=Image.open('dog.jpg')

此时读取同一张图片,img1是一个ndarray的数组,img2是PIL.JpegImagePlugin.JpegImageFile的对象,可以使用np.array(img2)转换为一个ndarray的数组。

而且cv2读入的图片是BGR格式的,而Image读入的图片是RBG格式。cv2.imshow()函数可以直接用于显示cv2读取的图片,而plt.imshow()则不能直接进行显示,下面两种方式都可以进行转换。

r, g, b = cv2.split(img1)
#以b,g,r分量重新生成新图像
img1_1 = cv2.merge([b,g,r])

#也可以通过自带函数
img1_2 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)

无论哪种方式读入的图片都是HxWxC(高X宽X通道),在卷积神经网络中,我们一般会把通道数放在前面即CxHxW,可以使用numpy的transpose()函数进行转化,

如果使用torchvision.transforms.ToTensor()可以自动帮我们完成转换。

import torchvision.transforms as transforms
import numpy as np

transform=transforms.ToTensor()
print(img1.shape)
print(np.transpose(img1,(2,0,1)).shape)
print(transform(img1).shape)

可得结果:

(576, 768, 3)

(3, 576, 768)

torch.Size([3, 576, 768])

所以在使用cv2读入图片时候进行BGR->RGB的转换,通道位置可以自己调用函数转换,也可以使用transform进行转换。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值