2.6.3 基础操作
图像是数组: 使用完整的numpy机制。
In [21]:
face = misc.face(gray=True)
face[0, 40]
Out[21]:
127
In [22]:
# 切片
face[10:13, 20:23]
Out[22]:
array([[141, 153, 145],
[133, 134, 125],
[ 96, 92, 94]], dtype=uint8)
In [24]:
face[100:120] = 255
lx, ly = face.shape
X, Y = np.ogrid[0:lx, 0:ly]
mask = (X - lx / 2) ** 2 + (Y - ly / 2) ** 2 > lx * ly / 4
# 掩码(masks)
face[mask] = 0
# 象征索引(Fancy indexing)
face[range(400), range(400)] = 255
2.6.3.1 统计信息
In [26]:
face = misc.face(gray=True)
face.mean()
Out[26]:
113.48026784261067
In [27]:
face.max(), face.min()
Out[27]:
(250, 0)
np.histogram
练习
- 将
scikit-image
logo作为数组打开 (http://scikit-image.org/_static/img/logo.png), 或者在你电脑上的其他图像。 - 剪切图像的有意义部分,例如,logo中的python圆形。
- 用
matplotlib
显示图像数组。改变interpolation方法并且放大看一下差异。 - 将你的图像改变为灰度
- 通过改变它的最小最大值增加图像的对比度。选做:使用
scipy.stats.scoreatpercentile
(读一下文本字符串!) 来饱和最黑5%的像素和最亮5%的像素。 - 将数组保存为两个不同的文件格式 (png, jpg, tiff)
2.6.3.2 几何图像变换
In [28]:
face = misc.face(gray=True)
lx, ly = face.shape
# 剪切
crop_face = face[lx / 4: - lx / 4, ly / 4: - ly / 4]
# up <-> down 翻转
flip_ud_face = np.flipud(face)
# 旋转
rotate_face = ndimage.rotate(face, 45)
rotate_face_noreshape = ndimage.rotate(face, 45, reshape=False)