ToPILImage in PyTorch (4)

Buy Me a Coffee☕ *Memos: My post explains ToPILImage() about no arguments. My post explains ToPILImage() about mode argument (1). My post explains ToPILImage() about mode argument (2). ToPILImage() can convert an Image([..., C, H, W]), tensor or ndarray to a PIL(Pillow library) Image([H, W, C]) and doesn't scale its values to [0.0, 1.0] as shown below. *It's about mode argument (3): from torchvision.datasets import OxfordIIITPet from torchvision.transforms.v2 import ToPILImage, ToImage, PILToTensor import torch Image_data = OxfordIIITPet( root="data", transform=ToImage() ) Tensor_data = OxfordIIITPet( root="data", transform=PILToTensor() ) def show_images(im, m=None): if m == None: m = [None for _ in range(len(im))] if len(im) > len(m): for _ in range(len(im)-len(m)): m.append(None) plt.figure(figsize=[13, 6]) for i in range(len(im)): image = im[i] if torch.is_tensor(image): dpart = str(image.dtype).split(".")[1] elif isinstance(image, np.ndarray): dpart = str(image.dtype) title = "m" + str(m[i]) + "_PILImage from " \ + type(image).__name__+ "(" + dpart + ")" plt.subplot(1, 3, (i+1)) tp = ToPILImage(mode=m[i]) plt.title(label=title, y=1, fontsize=14) plt.imshow(X=tp(image)) plt.xticks(ticks=[]) plt.yticks(ticks=[]) plt.tight_layout() plt.show() show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["RGB", "RGB"]) show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["YCbCr", "YCbCr"]) show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["HSV", "HSV"]) print() show_images(im=[torch.tensor([[[0]], [[1]]])], m=["LA"]) # int64 show_images(im=[torch.tensor([[[0]], [[1]], [[2]]]), torch.tensor([[[0]], [[1]], [[2]]]), torch.tensor([[[0]], [[1]], [[2]]])], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]]), torch.tensor([[[0]], [[1]], [[2]], [[3]]]), torch.tensor([[[0]], [[1]], [[2]], [[3]]])], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0]]], dtype=torch.int32), torch.tensor([[[0]], [[1]]], dtype=torch.int32)], m=["I", "LA"]) show_images(im=[torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32)], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32), torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32)], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0.]]]), # float32 torch.tensor([[[0.]], [[1.]]])], m=["L", "LA"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]]), torch.tensor([[[0.]], [[1.]], [[2.]]]), torch.tensor([[[0.]], [[1.]], [[2.]]])], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]])], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]]], dtype=torch.float64)], m=["L", "LA"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64)], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]], dtype=torch.float64), torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]], dtype=torch.float64)], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]]])], # complex64 m=["LA"]) show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]])], m=["RGB", "YCbCr", "HSV"]) show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]], [[3.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]], [[3.+0.j]]]), torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]], [[3.+0.j]]])], m=["RGBA", "CMYK", "RGBX"]) print() show_images(im=[torch.tensor([[[True]], [[False]]])], m=["LA"]) show_ima

Apr 29, 2025 - 14:14
 0
ToPILImage in PyTorch (4)

Buy Me a Coffee

*Memos:

ToPILImage() can convert an Image([..., C, H, W]), tensor or ndarray to a PIL(Pillow library) Image([H, W, C]) and doesn't scale its values to [0.0, 1.0] as shown below. *It's about mode argument (3):

from torchvision.datasets import OxfordIIITPet
from torchvision.transforms.v2 import ToPILImage, ToImage, PILToTensor
import torch

Image_data = OxfordIIITPet(
    root="data",
    transform=ToImage()
)

Tensor_data = OxfordIIITPet(
    root="data",
    transform=PILToTensor()
)

def show_images(im, m=None):
    if m == None:
        m = [None for _ in range(len(im))]
    if len(im) > len(m):
        for _ in range(len(im)-len(m)):
            m.append(None)
    plt.figure(figsize=[13, 6])
    for i in range(len(im)):
        image = im[i]
        if torch.is_tensor(image):
            dpart = str(image.dtype).split(".")[1]
        elif isinstance(image, np.ndarray):
            dpart = str(image.dtype)
        title = "m" + str(m[i]) + "_PILImage from " \
                + type(image).__name__+ "(" + dpart + ")"
        plt.subplot(1, 3, (i+1))
        tp = ToPILImage(mode=m[i])
        plt.title(label=title, y=1, fontsize=14)
        plt.imshow(X=tp(image))
        plt.xticks(ticks=[])
        plt.yticks(ticks=[])
    plt.tight_layout()
    plt.show()

show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["RGB", "RGB"])
show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["YCbCr", "YCbCr"])
show_images(im=[Image_data[0][0], Tensor_data[0][0]], m=["HSV", "HSV"])
print()
show_images(im=[torch.tensor([[[0]], [[1]]])], m=["LA"]) # int64
show_images(im=[torch.tensor([[[0]], [[1]], [[2]]]),
                torch.tensor([[[0]], [[1]], [[2]]]),
                torch.tensor([[[0]], [[1]], [[2]]])],
            m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]]),
                torch.tensor([[[0]], [[1]], [[2]], [[3]]]),
                torch.tensor([[[0]], [[1]], [[2]], [[3]]])],
            m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0]]], dtype=torch.int32),
                torch.tensor([[[0]], [[1]]], dtype=torch.int32)],
            m=["I", "LA"])
show_images(im=[torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32),
                torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32),
                torch.tensor([[[0]], [[1]], [[2]]], dtype=torch.int32)],
            m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32),
                torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32),
                torch.tensor([[[0]], [[1]], [[2]], [[3]]], dtype=torch.int32)],
            m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0.]]]), # float32
                torch.tensor([[[0.]], [[1.]]])], m=["L", "LA"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]]),
                torch.tensor([[[0.]], [[1.]], [[2.]]]),
                torch.tensor([[[0.]], [[1.]], [[2.]]])],
            m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]),
                torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]]),
                torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]])],
            m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0.]]], dtype=torch.float64),
                torch.tensor([[[0.]], [[1.]]], dtype=torch.float64)],
            m=["L", "LA"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64),
                torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64),
                torch.tensor([[[0.]], [[1.]], [[2.]]], dtype=torch.float64)],
            m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]],
                dtype=torch.float64),
                torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]],
                dtype=torch.float64),
                torch.tensor([[[0.]], [[1.]], [[2.]], [[3.]]],
                dtype=torch.float64)],
            m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]]])], # complex64
            m=["LA"])
show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]),
                torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]]),
                torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]]])],
            m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]],
                              [[3.+0.j]]]),
                torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]],
                              [[3.+0.j]]]),
                torch.tensor([[[0.+0.j]], [[1.+0.j]], [[2.+0.j]],
                              [[3.+0.j]]])], m=["RGBA", "CMYK", "RGBX"])
print()
show_images(im=[torch.tensor([[[True]], [[False]]])], m=["LA"])
show_images(im=[torch.tensor([[[True]], [[False]], [[True]]]), # bool
                torch.tensor([[[True]], [[False]], [[True]]]),
                torch.tensor([[[True]], [[False]], [[True]]])],
            m=["RGB", "YCbCr", "HSV"])
show_images(im=[torch.tensor([[[True]], [[False]], [[True]], [[False]]]),
                torch.tensor([[[True]], [[False]], [[True]], [[False]]]),
                torch.tensor([[[True]], [[False]], [[True]], [[False]]])],
            m=["RGBA", "CMYK", "RGBX"])

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description

Image description