如何用Python操作图像的像素值
众所周知,彩色图像是各种像素的集合。如果我们改变像素值,图像将变成不同颜色的图像。手动完成这项繁琐的任务是非常可怕的,因为一张图像可能包含数百万个像素。因此,我们将写一个Python脚本来轻松完成这项任务。
在开发图像数据的预测模型时,我们有时需要对图像进行操作。为此,Python有一个神奇的库,名为Python Imaging Library(PIL)。这个库包含了一些方法,通过这些方法我们可以提取图像的像素图,并且在循环的帮助下我们可以遍历每个像素,并根据我们的需要改变其像素值。像素是图像中最小的基本组成部分,同样,像素图可以被认为是一个代表图像的像素矩阵。
步骤
1.首先,我们需要一个图像文件作为输入。这个图像文件可以通过Image.new()方法创建,也可以通过Image.open()方法从本地机器导入。这两种情况在下面的例子中都有显示。(不是必须的,但为了方便起见,我们将图像保存为 “input.png”,特别是为了看一看其中的区别。)
2.其次,我们需要在Image.load()方法的帮助下提取输入图像的像素图(像素值的矩阵),这样我们就可以操作我们想要的像素。Image.size方法返回图像(像素图或矩阵)的宽度和高度(列和行)。然后在循环的帮助下,我们将迭代并改变我们所需的像素值。
3.最后,在更新或改变像素值后,我们将得到输出图像。(同样不是强制性的,但为了方便,我们将在Image.save()方法的帮助下把输出图像保存为 “output.png”。 我们还可以使用Image.show()方法在输出屏幕上看到图像。
例子1:使用本地机器的图像,并将其一半变成灰度图像。
将一个图像变为灰度图像的平均公式。
上述公式在理论上是正确的,但有一个更完善的公式(加权法,也叫光度法,根据红、绿、蓝的波长来衡量)如下。
输入图片:
输出:
输出图像。
注意:这里一半的图像已经被转换为灰度,但完整的图像可以用同样的代码完成,只需将(width/2)改为(width)即可。要了解更多的信息,请参考Image.getpixel() 方法。
例子2:操纵像素值。
输入图片:
输出: