如何反转 Python 中图像的绿色通道?

How to invert the green channel of an image in Python?

如何反转 RGB 图像的一个通道?在这种情况下,我的图像是 3D 引擎的法线贴图,以 JPEG 或 TIFF 等图像格式保存,我想反转绿色通道——也就是说,完全反转绿色波段中的高点和低点。

我假设你有一个 numpy(或 torch 张量)图像——你可以在绿色通道上建立索引(假设通道是你的最后一个维度)

img[:, :, 1] = 255 - img[:, :, 1]

我假设你想要 0 -> 255255 -> 0

T(r) = L – 1 – r

L=256

L-1=255(Max)

r=Each pixel of the image

s=255-r

s= T(r) =255-r

您可以通过安装和使用 Pillow 来完成此操作,它适用于大多数图像格式(JPEG、PNG、TIFF 等)。

from PIL import Image
from PIL.ImageChops import invert

image = Image.open('test.tif')
red, green, blue = image.split()
image_with_inverted_green = Image.merge('RGB', (red, invert(green), blue))
image_with_inverted_green.save('test_inverted_green.tif')

从您的文件中加载图像后,使用 Image.split, invert the green channel/image with ImageChops.invert, and then join it together with the original red and blue bands into a new image with Image.merge 分割成其通道。

如果使用以 RGB 以外的格式(例如 PNG,它有一个额外的透明通道)编码的格式,图像开头行可以修改为:

image = Image.open('test.png').convert('RGB')

使用这张图片进行测试:

产生这个:

(ImageChops, 顺便说一句,看起来很奇怪的术语,但它是“图像通道操作”的缩写。)