张芷铭的个人博客

PIL/OpenCV 使用 HWC 格式,PyTorch 使用 CHW 格式。PIL 是 RGB,OpenCV 是 BGR。转换时需注意通道顺序和取值范围。

格式对比

颜色通道维度顺序数据类型取值范围
PILRGBHWCndarray0-255
OpenCVBGRHWCndarray0-255
PyTorch取决于输入(N)CHWtensor0-1 或 0-255

关键差异

颜色通道

  • PIL:RGB
  • OpenCV:BGR
  • PyTorch:保持输入顺序

维度顺序

  • PIL/OpenCV:HWC(高×宽×通道)
  • PyTorch:CHW(通道×高×宽),批量时为 NCHW

数据转换

1
2
3
4
5
6
# PIL/OpenCV → PyTorch
from torchvision.transforms import ToTensor
tensor = ToTensor()(pil_image)  # HWC → CHW, 0-255 → 0-1

# PyTorch → NumPy
numpy_array = tensor.permute(1, 2, 0).numpy()  # CHW → HWC

取值范围

  • PIL/OpenCV:byte(0-255)
  • PyTorch:标准化后 float(0-1)

转换注意事项

  1. 通道转换:RGB ↔ BGR 使用 cv2.cvtColor()tensor[..., [2,1,0]]
  2. 维度转换:HWC ↔ CHW 使用 permute()transpose()
  3. 数值转换float_tensor = int_array / 255.0

Comments