图1-29 鹦鹉图像的剪切变换
④ 透视变换。通过使用Image.PERSPECTIVE参数,可以使用transform()函数对图像进行透视变换,如下面的代码所示:
params = [1, 0.1, 0, -0.1, 0.5, 0, -0.005, -0.001]
im1 = im.transform((im.width//3, im.height), Image.PERSPECTIVE, params,Image.BICUBIC)
im1.show()
运行上述代码,透视投影之后获得的图像如图1-30所示。
图1-30 鹦鹉图像的透视变换
(7)更改图像的像素值。可以使用putpixel()函数更改图像中的像素值。接着讨论使用函数向图像中添加噪声的主流应用。
可以通过从图像中随机选择几个像素,然后将这些像素值的一半设置为黑色,另一半设置为白色,来为图像添加一些椒盐噪声(salt-and-pepper noise)。如下代码展示了如何添加噪声:
# choose 5000 random locations inside image
im1 = im.copy() # keep the original image, create a copy
n = 5000
x, y = np.random.randint(0, im.width, n), np.random.randint(0, im.height,n)
for (x,y) in zip(x,y):
im1.putpixel((x, y), ((0,0,0)
if np.random.rand() < 0.5 else (255,255,255))) # salt-and-pepper noise
im1.show()
运行上述代码,输出噪声图像,如图1-31所示。
图1-31 添加了椒盐噪声的鹦鹉图像
(8)在图像上绘制图形。可以用PIL.ImageDraw模块中的函数在图像上绘制线条或其他几何图形(例如ellipse()函数用于绘制椭圆),如下面的代码所示:
im = Image.open("../images/parrot.png")
draw = ImageDraw.Draw(im)
draw.ellipse((125, 125, 200, 250), fill=(255,255,255,128))
del draw
im.show()
运行上述代码,输出图像如图1-32所示。
图1-32 在鹦鹉图像上绘制椭圆
(9)在图像上添加文本。可以使用PIL.ImageDraw模块中的text()函数向图像中添加文本,如下面的代码所示。
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("arial.ttf", 23) # use a truetype font
draw.text((10, 5), "Welcome to image processing with python", font=font)
del draw
im.show()
运行上述代码,输出图像如图1-33所示。