Python – 使用Pillow去除多通道图像中的一个通道
通道删除是一种去除多通道图像中的一个通道的方法。去除的意思是把某个通道的颜色值变成0(所有像素),也就是说,这个通道对最终的图像没有任何影响(假设颜色是 “正常 “混合的)。在删除颜色通道时要遵循色彩理论(色轮)。一旦一个通道被删除,其他通道的值就会被添加到新的图像中。这种方法在图像处理包中被广泛使用,如Adobe Photoshop、Gimp等。我们将使用pillow库来实现通道删除。要安装这个库,在命令行中执行以下命令。
在后面的方法中,我们将利用numpy库提供的元素运算。要安装numpy,在命令行中执行以下命令。
方法1:在这个方法中,我们将使用作为参数传递给Image.convert()的变换矩阵。变换矩阵是。
一个正常的RGB图像会有一个如上所示的矩阵。
在上面的矩阵中,把1改为0就可以删除那个特定的通道。对于我们的目的,我们不需要改变其他偏移的值,因为它们会导致不同的效果,而这是不需要的。示例图像。
代码:
输出图像:
解释:首先,我们通过使用Image.open()打开图像来创建图像对象,然后在变量img中保存返回对象。然后我们用数值填充我们的转换矩阵(矩阵变量),这将导致绿色通道从图像中被移除。由于绿色通道从图像中被移除(null’d),最终图像的像素值将取决于图像的红色和蓝色通道(给出品红色的阴影,因为红色+蓝色=品红色)。然后我们将转换矩阵发送到convert()方法中,并保存了返回的图像。最后,我们用img.show()显示图像。同样的效果可以应用在多个通道上,通过将几个1改为0。
例子:同样的代码,但有矩阵。
这是一个红色和绿色通道被删除的图像(因为它们的位置值是0)。由于这个原因,所得到的图像是蓝色的。同样的代码与矩阵。
因为所有的位置值都是1,所以所有的颜色通道都被保留下来。方法2:在这个方法中,我们将使用numpy库提供的元素乘法操作(在我们的例子中是广播),来否定图像的一个颜色通道。代码。
输出的图像:
解释:首先,我们为我们的样本图像获得一个图像对象,并将其存储在变量img中。然后,我们使用数据类型为np.uint8(8位无符号整数)的函数np.array()将图像转换成numpy数组。之后,我们给蓝色通道的每个像素赋值为0,使用img_arr[:, ::, 2] = 0,这意味着给这个多通道矩阵的第三通道(蓝色)的每一行和每一列赋值为0。最后,我们显示了这个图像。
注意:第三个参数中的2被视为蓝色通道(第三通道)的原因是numpy使用了基于0的索引,由于第一个元素的索引是0而不是1,因此索引2的元素成为第三个元素。