image数据类型直接转化成tensor,保持像素值为0-255
时间: 2025-06-27 21:16:37 浏览: 17
### 转换图像数据至Tensor并保留像素值范围
为了将图像数据转换为PyTorch中的张量(Tensor),同时保持像素值在0到255之间的整数值,通常的方法是避免执行标准化操作(即将像素值除以255)。默认情况下,`ToTensor()`会自动将图片的像素值从[0, 255]缩放到[0.0, 1.0]区间,并改变维度顺序从(HWC)变为(CHW)[^1]。然而,在某些场景下希望维持原始的像素强度而不做任何变换。
如果想要绕过这种行为,可以选择不使用`ToTensor()`自带的比例因子,而是手动创建自定义的转换逻辑来处理这个问题:
```python
import torch
from torchvision import transforms
import numpy as np
class ToTensorWithoutScaling(object):
"""Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor.
This transform does not scale the pixel values by 255."""
def __call__(self, pic):
# handle PIL Image
if isinstance(pic, np.ndarray):
# H x W x C -> C x H x W
img = torch.from_numpy(pic.transpose((2, 0, 1)))
return img.type(torch.uint8)
transform = transforms.Compose([
ToTensorWithoutScaling(),
])
# 假设img是一个形状为[H,W,C]且dtype=np.uint8的NumPy数组表示的图像
tensor_image = transform(img)
print(tensor_image.dtype) # 应该打印出torch.uint8
```
上述代码展示了如何通过继承Python对象来自定义一个名为`ToTensorWithoutScaling`的新类[^3]。此方法允许直接将图像数据转换为张量形式而不会影响其原有的像素分布特性。注意这里返回的是`torch.uint8`类型的张量,这有助于保存原图的真实色彩信息。
阅读全文
相关推荐


















