所以说我有一张图片,我想让它只显示红色通道,并且图片看起来是红色的,我将如何使用 PIL 来做到这一点?谢谢。
问问题
13860 次
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 回答