OpenCV、PIL读取图片、格式相互转换、保存

一、读取图片(该图片为RGB三通道,高为400像素,宽为380像素)

调用OpenCV、PIL和numpy库,下面代码默认已调用库

import cv2
from PIL import Image
import numpy as np
import torchvision.transforms as transforms

OpenCV读取图片:

img_cv2_BGR = cv2.imread("Lena.jpg")
img_cv2 = cv2.cvtColor(img_cv2_BGR, cv2.COLOR_BGR2RGB)
print(type(img_cv2))
print(img_cv2.shape)
print(img_cv2.dtype)
---------------------------------

(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))
--------------------------------

1、得到的是PIL的图片格式。

二、格式转换

PIL图转为numpy.ndarray的格式

img_PIL = Image.open("Lena.jpg")
array_img_PIL = np.array(img_PIL)
print(type(array_img_PIL))
----------------------------------

numpy.ndarray转为PIL的格式

img_cv2 = cv2.imread("Lena.jpg")
img_PIL = Image.fromarray(img_cv2)
print(type(img_PIL))
----------------------------------

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)
----------------------------------

torch.Size([3, 400, 380])

1、转为tensor后像素灰度值由之前[255,0]的整数区间归一化为[1,0]的小数区间。

tensor转为numpy.ndarray的格式

img_numpy = img_tensor.numpy()
print(type(img_numpy))
------------------------------

三、保存图片

保存numpy.ndarray格式为图片

cv2.imwrite("./myLena.jpg", img_cv2)

保存tensor格式为图片

torchvision.utils.save_image(img_tensor, "./myLena.jpg")

你可能感兴趣的:(数据结构,python,算法)