您可以使用Pillow 循环遍历图像的像素以检查它们是黑色还是白色。您不需要检查所有这些,为了优化过程,您可以检查每个块的一个像素并跳过其余的,这样,而不是检查 159.201 像素(399 x 399,图像的大小),您只检查 441 像素(21 x 21,块数)
这是一个如何阅读迷宫的示例:
from PIL import Image
BLOCK_SIZE = 19
im = Image.open('maze.jpg')
pixels = im.load()
width, height = im.size
offset = int(BLOCK_SIZE / 2)
maze = [
[
int(pixels[x + offset, y + offset][0] < 125)
for y in range(0, height, BLOCK_SIZE)
]
for x in range(0, width, BLOCK_SIZE)
]
如果您在处理后打印maze的内容:
for y in range(height / BLOCK_SIZE):
for x in range(width / BLOCK_SIZE):
print(maze[x][y]),
print('')
这是你得到的:
1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1
1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1
1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1
1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 1 0 1
1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1
1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 1 0 1
1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1
1 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 0 0 1
1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1
1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1
1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1
1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1
1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1
1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1
1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1
1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1
1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
关于代码的几点说明:
int(pixels[x + offset, y + offset][0] < 125)
这会从块 (x, y) 中提取一个像素 (pixels[x + offset, y + offset]) 并从中提取 RGB 颜色的第一个通道,因为它可以是黑色或白色,所有 3 个通道应该具有相同的值(例如:(0, 0, 0) 表示黑色或 (255, 255, 255) 表示白色),但图像并不完美,有些颜色实际上是灰色的,这就是为什么我使用 < 125 将黑色块与白色分开而不是检查特定值块。
offset 的目的是获取每个块中心的像素,这很有用,因为图像并不完美,块边界上的像素不太可靠