使用 crop() 方法可以从一幅图像中裁剪指定区域:
box = (100,100,400,400) region = pil_im.crop(box)该区域使用四元组来指定。四元组的坐标依次是(左,上,右,下)。PIL 中指定坐标系的左上角坐标为(0,0)。我们可以旋转上面代码中获取的区域,然后使用 paste() 方法将该区域放回去,具体实现如下:
region = region.transpose(Image.ROTATE_180) pil_im.paste(region,box) 1.1.4 调整尺寸和旋转要调整一幅图像的尺寸,我们可以调用 resize() 方法。该方法的参数是一个元组,用来指定新图像的大小:
out = pil_im.resize((128,128))要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用 rotate() 方法:
out = pil_im.rotate(45)上述例子的输出结果如图 1-1 所示。最左端是原始图像,然后是灰度图像、粘贴有旋转后裁剪图像的原始图像,最后是缩略图。
1.2 Matplotlib我们处理数学运算、绘制图表,或者在图像上绘制点、直线和曲线时,Matplotlib 是个很好的类库,具有比 PIL 更强大的绘图功能。Matplotlib 可以绘制出高质量的图表,就像本书中的许多插图一样。Matplotlib 中的 PyLab 接口包含很多方便用户创建图像的函数。Matplotlib 是开源工具,可以从 免费下载。该链接中包含非常详尽的使用说明和教程。下面的例子展示了本书中需要使用的大部分函数。
1.2.1 绘制图像、点和线尽管 Matplotlib 可以绘制出较好的条形图、饼状图、散点图等,但是对于大多数计算机视觉应用来说,仅仅需要用到几个绘图命令。最重要的是,我们想用点和线来表示一些事物,比如兴趣点、对应点以及检测出的物体。下面是用几个点和一条线绘制图像的例子:
from PIL import Image from pylab import * # 读取图像到数组中 im = array(Image.open(\'empire.jpg\')) # 绘制图像 imshow(im) # 一些点 x = [100,100,400,400] y = [200,500,200,500] # 使用红色星状标记绘制点 plot(x,y,\'r*\') # 绘制连接前两个点的线 plot(x[:2],y[:2]) # 添加标题,显示绘制的图像 title(\'Plotting: "empire.jpg"\') show()上面的代码首先绘制出原始图像,然后在 x 和 y 列表中给定点的 x 坐标和 y 坐标上绘制出红色星状标记点,最后在两个列表表示的前两个点之间绘制一条线段(默认为蓝色)。该例子的绘制结果如图 1-2 所示。show() 命令首先打开图形用户界面(GUI),然后新建一个图像窗口。该图形用户界面会循环阻断脚本,然后暂停,直到最后一个图像窗口关闭。在每个脚本里,你只能调用一次 show() 命令,而且通常是在脚本的结尾调用。注意,在 PyLab 库中,我们约定图像的左上角为坐标原点。