1.3.5.2 图片操作:给Lena加边框

让我们从著名的Lena图(http://www.cs.cmu.edu/~chuck/lennapg/) 上开始,用Numpy数组做一些操作。Scipy在 scipy.lena函数中提供了这个图的二维数组:

In [244]:

  1. from scipy import misc
  2. lena = misc.lena()

:在旧版的scipy中,你会在 scipy.lena()找到lena。

这是一些通过我们的操作可以获得图片:使用不同的颜色地图,裁剪图片,改变图片的一部分。

lenas

  • 让我们用pylab的 imshow函数显示这个图片。

In [245]:

  1. import pylab as plt
  2. lena = misc.lena()
  3. plt.imshow(lena)

Out[245]:

  1. <matplotlib.image.AxesImage at 0x110f51ad0>

1.3.5.2 图片操作:给Lena加边框 - 图2

  • Lena然后以为色彩显示。要将她展示为灰色需要指定一个颜色地图。

In [246]:

  1. plt.imshow(lena, cmap=plt.cm.gray)

Out[246]:

  1. <matplotlib.image.AxesImage at 0x110fb15d0>

1.3.5.2 图片操作:给Lena加边框 - 图3

  • 用一个更小的图片中心来创建数组:例如,从图像边缘删除30像素。要检查结果,用 imshow 显示这个新数组。

In [247]:

  1. crop_lena = lena[30:-30,30:-30]
  • 现在我们为Lena的脸加一个黑色项链形边框。要做到这一点,需要创建一个面具对应于需要变成黑色的像素。这个面具由如下条件定义 (y-256)2 + (x-256)2

In [248]:

  1. y, x = np.ogrid[0:512,0:512] # x 和 y 像素索引
  2. y.shape, x.shape

Out[248]:

  1. ((512, 1), (1, 512))

In [249]:

  1. centerx, centery = (256, 256) # 图像中心
  2. mask = ((y - centery)**2 + (x - centerx)**2) > 230**2 # 圆形

接下来我们为面具对应的图片像素赋值为0。语句非常简单并且直觉化:

In [253]:

  1. lena[mask] = 0
  2. plt.imshow(lena)

Out[253]:

  1. <matplotlib.image.AxesImage at 0x113d33fd0>

1.3.5.2 图片操作:给Lena加边框 - 图4

  • 接下来:将这个练习的所有命令复制到 lena_locket.py 脚本中,并且在IPython中用 %run lena_locket.py执行这个脚本,将圆形改为椭圆。