Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将黑白图像转换为列表列表(0,1)_Python_Image_Image Processing_Binary_Maze - Fatal编程技术网

使用Python将黑白图像转换为列表列表(0,1)

使用Python将黑白图像转换为列表列表(0,1),python,image,image-processing,binary,maze,Python,Image,Image Processing,Binary,Maze,我正在创建一个程序,使用Python中的Turtle模块来解决迷宫问题。为了绘制迷宫,我使用列表列表来通过列表[y][x]表示列及其空格。将这样的图像转换为具有二进制值的列表的最佳方式是什么 您可以使用循环检查图像的像素,以检查它们是黑色还是白色。您不需要检查所有像素,为了优化流程,您可以为每个块检查一个像素,然后跳过其余的,这样,而不是检查159.201像素(399 x 399,图像大小),您只需检查441‬ 像素(21 x 21,块数) 下面是一个如何阅读迷宫的示例: 从PIL导入图像 块

我正在创建一个程序,使用Python中的Turtle模块来解决迷宫问题。为了绘制迷宫,我使用列表列表来通过列表[y][x]表示列及其空格。将这样的图像转换为具有二进制值的列表的最佳方式是什么

您可以使用循环检查图像的像素,以检查它们是黑色还是白色。您不需要检查所有像素,为了优化流程,您可以为每个块检查一个像素,然后跳过其余的,这样,而不是检查159.201像素(399 x 399,图像大小),您只需检查441‬ 像素(21 x 21,块数)

下面是一个如何阅读迷宫的示例:

从PIL导入图像
块大小=19
im=Image.open('maze.jpg'))
像素=im.load()
宽度、高度=im尺寸
偏移量=整数(块大小/2)
迷宫=[
[
整数(像素[x+偏移,y+偏移][0]<125)
适用于范围内的y(0、高度、块大小)
]
适用于范围内的x(0、宽度、块大小)
]
如果在流程结束后使用以下命令打印
maze

范围内y的
(高度/块大小):
对于范围内的x(宽度/块大小):
打印(迷宫[x][y]),
打印(“”)
这是您获得的:

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(像素[x+偏移,y+偏移][0]<125)
这从块(x,y)中提取一个像素(
pixels[x+offset,y+offset]
),并从中提取RGB颜色的第一个通道,因为它可以是黑色或白色,所有3个通道应具有相同的值(例如:黑色的
(0,0,0)
,白色的
(255,255)
),但图像并不完美,有些颜色实际上是灰色的,这就是为什么我没有检查特定的值,而是使用
<125
来区分黑色块和白色块


偏移的目的是将像素置于每个块的中心,这很有用,因为图像也不完美,块边界上的像素不太可靠

欢迎使用堆栈溢出。纯代码编写请求与堆栈溢出无关-我们希望这里的问题与特定的编程问题相关-但我们很乐意帮助您自己编写!告诉我们,你被困在哪里了。这也将帮助我们更好地回答您的问题。非常感谢您的回答!我想知道的正是我想要的,我的问题是,你是如何得到盒子大小的?
block width=image width/maze columns=399/21=19
block height=image height/maze rows=399/21=19
block size:
19x19