1.3.5.2 图片操作:给Lena加边框
让我们从著名的Lena图(http://www.cs.cmu.edu/~chuck/lennapg/) 上开始,用Numpy数组做一些操作。Scipy在 scipy.lena
函数中提供了这个图的二维数组:
In [244]:
from scipy import misc
lena = misc.lena()
注:在旧版的scipy中,你会在 scipy.lena()
找到lena。
这是一些通过我们的操作可以获得图片:使用不同的颜色地图,裁剪图片,改变图片的一部分。
- 让我们用pylab的
imshow
函数显示这个图片。
In [245]:
import pylab as plt
lena = misc.lena()
plt.imshow(lena)
Out[245]:
<matplotlib.image.AxesImage at 0x110f51ad0>
- Lena然后以为色彩显示。要将她展示为灰色需要指定一个颜色地图。
In [246]:
plt.imshow(lena, cmap=plt.cm.gray)
Out[246]:
<matplotlib.image.AxesImage at 0x110fb15d0>
- 用一个更小的图片中心来创建数组:例如,从图像边缘删除30像素。要检查结果,用
imshow
显示这个新数组。
In [247]:
crop_lena = lena[30:-30,30:-30]
- 现在我们为Lena的脸加一个黑色项链形边框。要做到这一点,需要创建一个面具对应于需要变成黑色的像素。这个面具由如下条件定义
(y-256)2 + (x-256)2
In [248]:
y, x = np.ogrid[0:512,0:512] # x 和 y 像素索引
y.shape, x.shape
Out[248]:
((512, 1), (1, 512))
In [249]:
centerx, centery = (256, 256) # 图像中心
mask = ((y - centery)**2 + (x - centerx)**2) > 230**2 # 圆形
接下来我们为面具对应的图片像素赋值为0。语句非常简单并且直觉化:
In [253]:
lena[mask] = 0
plt.imshow(lena)
Out[253]:
<matplotlib.image.AxesImage at 0x113d33fd0>
- 接下来:将这个练习的所有命令复制到
lena_locket.py
脚本中,并且在IPython中用%run lena_locket.py
执行这个脚本,将圆形改为椭圆。