8

所以说我有一张图片,我想让它只显示红色通道,并且图片看起来是红色的,我将如何使用 PIL 来做到这一点?谢谢。

4

4 回答 4

15

您可以使用Image.split()PIL 中的操作将图像分成多个波段:

img = Image.open("image.jpg")
red, green, blue = img.split()

如果图像具有 alpha 通道 (RGBA),则 split 函数将额外返回该通道。更多信息在这里

于 2015-07-31T09:51:21.767 回答
8

我找到了答案。而不是使用将波段转换为灰度的 im.split(),我应该将图像转换为数组,将我不想要的波段乘以 0,然后将其转回图像对象。

导入 Image 和 numpy,我做了以下操作:

a = Image.open("image.jpg")
a = numpy.array(a)
a[:,:,0] *=0
a[:,:,1] *=0
a = Image.fromarray(a)
a.show()

这将显示蓝色图像。

于 2013-07-16T12:50:13.743 回答
2

这里晚了,但是因为我们正在处理 numpy,所以我们可以使用布尔索引。

def channel(img, n):
    """Isolate the nth channel from the image.

       n = 0: red, 1: green, 2: blue
    """
    a = np.array(img)
    a[:,:,(n!=0, n!=1, n!=2)] *= 0
    return Image.fromarray(a)
于 2016-03-30T15:28:45.847 回答
0

对于希望从图像中提取单个通道的人(与生成具有 R、G 和 B 通道但 G 和 B 通道全为零的图像相反),您可以执行以下操作:

img = Image.open("image.jpg")
red = img.getchannel('R')
# OR
red = img.getchannel(0)  # Avoids internal lookup of 'R' in img.getbands()
于 2020-05-29T11:56:28.763 回答