Menu
CoddyTech

将图像作为数组

本课属于 Coddy Machine Learning 学习旅程的“数据与图表”单元。第 29 课,共 60 课。

黑白照片是一个数字网格,每个像素对应一个亮度值。因此,2D 数组就是一张图像,而 ax.imshow 可以绘制它:

plus = np.array([[0, 0, 1, 0, 0],
                 [0, 0, 1, 0, 0],
                 [1, 1, 1, 1, 1],
                 [0, 0, 1, 0, 0],
                 [0, 0, 1, 0, 0]])
fig, ax = plt.subplots()
ax.imshow(plus, cmap="gray")
plt.show()

一张 5×5 图像,黑色背景上有一个白色加号,每个像素都显示其值:白色十字处为 1,黑色角落处为 0

cmap="gray" 选择灰度颜色映射:最小值为黑色,最大值为白色。第 0 行显示在顶部,与数组的排列顺序一致。

照片通常用 0(黑色)到 255(白色)来存储像素值。在接下来的学习过程中,模型会读取以这种方式存储的手写数字。

challenge icon

挑战

中等

扫描仪读取了一封打印的字母,但将它以反色存储了:深色纸上的亮色墨水。嵌套列表 scan 保存了每个像素的亮度,范围为 0 到 255。

  1. 将 scan 转换为数组并反转:每个像素都变为 255 减去它的值。
  2. 使用灰度色图绘制图像,标题设为 Letter E,然后显示图像。

你的图像应该和这个一样,修正后扫描出的 L:

白色背景上的一个小黑色字母 L,高 7 像素,宽 5 像素,标题为 Letter L

你的程序不会打印任何内容。Coddy 会逐行描述你的图像。

亲手试试

import numpy as np
import matplotlib.pyplot as plt

scan = [[255, 255, 255, 255, 255],
        [255, 30, 0, 0, 0],
        [255, 0, 0, 0, 0],
        [255, 255, 255, 200, 0],
        [255, 0, 0, 0, 0],
        [255, 0, 0, 0, 15],
        [255, 255, 255, 255, 255]]

# 在下方编写代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

数据与图表中的所有课

自己练习: Python 在线编译器