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

本文介绍了如何使用OpenCV和PIL库读取、处理及转换图像格式,包括从RGB图像到ndarray、PIL格式及tensor的转换方法,并提供了保存不同格式图像的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、读取图片(该图片为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)
---------------------------------
<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.squeeze().cpu().numpy() * 255.0
img_numpy = np.transpose(img_numpy, [1, 2, 0])
print(type(img_numpy))
------------------------------
<class 'numpy.ndarray'>

1、此处举例的tensor维度为[1,3,400,380],转换后维度为[400,380,3]

2、可自行根据tensor数据进行调整,比如反归一化(*255)、toCPU(.cpu())、维度转换(transpose)等

3、若是tensor维度为[3,400,380]则无须使用.squeeze()

4、建议使用torchvision.utils.save_image直接保存图像

三、保存图片

保存numpy.ndarray格式为图片

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

保存tensor格式为图片

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值