使用Python操作图像的像素值的步骤可以归纳为以下几个方面:
-
首先安装Pillow库,Pillow是Python Imaging Library的替代品,更加适用于现代Python环境 http://pillow.readthedocs.io/en/3.0.0/installation.html
-
打开一张图片,使用Pillow库的Image模块打开图片,获得了Image对象
-
获取Image对象的像素值,使用Image对象的load()函数进行像素读取操作,load()函数读取像素信息并返回一个二维数组,其中每个元素代表了每个像素的RGB值(或RGBA值)
-
修改或操作像素值。我们可以通过修改数组中的元素,来改变或操作图像的像素数值,从而达到我们想要的目的。
下面是两个示例说明:
- 将图片所有像素的红色通道值都设为255
from PIL import Image
# 打开一张图片
im = Image.open("test.jpg")
# 获取像素数组
pixels = im.load()
# 遍历像素数组,将红色通道值都设为255
for i in range(im.size[0]):
for j in range(im.size[1]):
r, g, b = pixels[i, j]
pixels[i, j] = (255, g, b)
# 保存修改后的图片
im.save("test_modified.jpg")
这个示例中,通过双重循环遍历像素数组的所有像素,将每个像素的红色通道值都设为255,从而让整张图片的红色通道值变为了最大值。
- 将图片像素值二值化
from PIL import Image
# 打开一张图片,将其灰度化
im = Image.open("test.jpg").convert('L')
# 获取像素数组
pixels = im.load()
# 遍历像素数组,将像素值二值化
threshold = 130
for i in range(im.size[0]):
for j in range(im.size[1]):
if pixels[i, j] > threshold:
pixels[i, j] = 255
else:
pixels[i, j] = 0
# 保存修改后的图片
im.save("test_binary.jpg")
这个示例中,首先将彩色图片转化为灰度图片(convert(‘L’)),然后使用双重循环遍历像素数组的所有像素,若像素值大于预设值,则将该像素值设为255,否则设为0,从而将图片像素值二值化。经过二值化之后,图片中只有黑色和白色两种颜色,适用于一些机器视觉和图像识别领域的应用。