张芷铭的个人博客

读取图片(默认保留原始格式和通道顺序)

Python读取图片最常用的有4种方式,分别适配普通处理、CV任务、可视化、深度学习等场景,核心代码简洁易用:

1. Pillow(最通用,推荐优先使用)

Pillow是Python图像处理标准库,支持几乎所有图片格式,接口简洁。

1
2
3
4
5
6
7
8
9
from PIL import Image

# 读取图片(默认保留原始格式和通道顺序)
img = Image.open("zidane.jpg")

# 常用后续操作(可选)
img = img.resize((640, 640))  # 调整尺寸
img_np = np.array(img)        # 转为numpy数组(RGB格式,shape=(H, W, 3))
img.save("resized_zidane.jpg")# 保存图片
  • 特点:返回PIL.Image对象,支持裁剪、旋转、缩放等常用操作,与numpy、PyTorch兼容性好。

2. OpenCV(CV任务首选,如目标检测、分割)

OpenCV是计算机视觉专用库,读取速度快,默认返回numpy数组,适合数值计算。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import cv2

# 读取图片(默认BGR通道顺序,shape=(H, W, 3),uint8类型)
img = cv2.imread("zidane.jpg")

# 关键:转为RGB格式(适配多数可视化和模型输入要求)
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 常用后续操作(可选)
img_resized = cv2.resize(img_rgb, (640, 640))  # 调整尺寸
cv2.imwrite("opencv_zidane.jpg", img)          # 保存(需用BGR格式)
  • 特点:返回numpy数组(uint8,0-255),适合OpenCV生态的后续处理(如边缘检测、轮廓提取)。

3. matplotlib(可视化友好,适合绘图展示)

matplotlib主要用于绘图,但读取图片方便,默认返回RGB格式,可直接配合plt.imshow()显示。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

# 读取图片(RGB通道顺序,shape=(H, W, 3),numpy数组)
img = mpimg.imread("zidane.jpg")

# 直接显示图片(无需转换通道)
plt.imshow(img)
plt.axis("off")  # 隐藏坐标轴
plt.show()
  • 特点:读取和显示一体化,适合快速查看图片,或在图表中嵌入图片。

4. torchvision(深度学习适配,直接转张量)

适合PyTorch深度学习场景,读取后可直接转为模型要求的BCHW格式张量。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from torchvision.io import read_image
from torchvision.transforms import Resize

# 读取图片(默认RGB格式,返回BCHW格式张量,dtype=torch.uint8)
img_tensor = read_image("zidane.jpg")  # shape=(3, H, W)

# 常用后续操作(适配模型输入)
resize = Resize((640, 640))
img_resized = resize(img_tensor)       # 调整尺寸
img_norm = img_resized.float() / 255.0 # 归一化到[0,1]
  • 特点:无需手动转换通道和格式,直接对接PyTorch模型,适合深度学习推理/训练。

要不要我帮你整理一份 带完整注释的通用图片读取工具脚本,包含4种方式的封装、格式转换、错误处理,可直接调用读取并适配不同使用场景?

💬 评论