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 = 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'>

    原文作者:Aska205
    原文地址: https://blog.csdn.net/weixin_43407674/article/details/121422650
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞