详解如何用Python操作图像的像素值

  • Post category:Python

使用Python操作图像的像素值的步骤可以归纳为以下几个方面:

  1. 首先安装Pillow库,Pillow是Python Imaging Library的替代品,更加适用于现代Python环境 http://pillow.readthedocs.io/en/3.0.0/installation.html

  2. 打开一张图片,使用Pillow库的Image模块打开图片,获得了Image对象

  3. 获取Image对象的像素值,使用Image对象的load()函数进行像素读取操作,load()函数读取像素信息并返回一个二维数组,其中每个元素代表了每个像素的RGB值(或RGBA值)

  4. 修改或操作像素值。我们可以通过修改数组中的元素,来改变或操作图像的像素数值,从而达到我们想要的目的。

下面是两个示例说明:

  1. 将图片所有像素的红色通道值都设为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,从而让整张图片的红色通道值变为了最大值。

  1. 将图片像素值二值化
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,从而将图片像素值二值化。经过二值化之后,图片中只有黑色和白色两种颜色,适用于一些机器视觉和图像识别领域的应用。