一、读取图片(该图片为RGB三通道,高为400像素,宽为380像素)
调用OpenCV、PIL和numpy库,下面代码默认已调用库
import cv2
from PIL import Image
import numpy as np
import torchvision.transforms as transforms
OpenCV读取图片:
img_cv2 = cv2.imread("Lena.jpg")
print(type(img_cv2))
print(img_cv2.shape)
print(img_cv2.dtype)
---------------------------------
<class 'numpy.ndarray'>
(400, 380, 3)
uint8
1、得到的是ndarray的格式。
2、image.shap表示图像的形状(H W C),其中C表示通道数/深度,它的顺序为BGR
3、image.dtype表示图像数据类型unit8(0-255)
PIL读取图片:
img_PIL = Image.open("Lena.jpg")
print(type(img_PIL))
--------------------------------
<class 'PIL.PngImagePlugin.PngImageFile'>
1、得到的是PIL的图片格式。
二、格式转换
PIL图转为numpy.ndarray的格式
img_PIL = Image.open("Lena.jpg")
array_img_PIL = np.array(img_PIL)
print(type(array_img_PIL))
----------------------------------
<class 'numpy.ndarray'>
numpy.ndarray转为PIL的格式
img_cv2 = cv2.imread("Lena.jpg")
img_PIL = Image.fromarray(img_cv2)
print(type(img_PIL))
----------------------------------
<class 'PIL.Image.Image'>
numpy.ndarray转为tensor的格式
img_cv2 = cv2.imread("Lena.jpg")
transforms = transforms.ToTensor()
img_tensor = transforms(img_cv2)
print(type(img_tensor))
print(img_tensor.shape)
----------------------------------
<class 'torch.Tensor'>
torch.Size([3, 400, 380])
1、转为tensor后像素灰度值由之前[255,0]的整数区间归一化为[1,0]的小数区间。
tensor转为numpy.ndarray的格式
img_numpy = img_tensor.numpy()
print(type(img_numpy))
------------------------------
<class 'numpy.ndarray'>