PIL/OpenCV 使用 HWC 格式,PyTorch 使用 CHW 格式。PIL 是 RGB,OpenCV 是 BGR。转换时需注意通道顺序和取值范围。
格式对比
| 库 | 颜色通道 | 维度顺序 | 数据类型 | 取值范围 |
|---|
| PIL | RGB | HWC | ndarray | 0-255 |
| OpenCV | BGR | HWC | ndarray | 0-255 |
| PyTorch | 取决于输入 | (N)CHW | tensor | 0-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)
转换注意事项
- 通道转换:RGB ↔ BGR 使用
cv2.cvtColor() 或 tensor[..., [2,1,0]] - 维度转换:HWC ↔ CHW 使用
permute() 或 transpose() - 数值转换:
float_tensor = int_array / 255.0
Comments