我有一张像国际象棋棋盘的图片,使用了4种颜色(黑色、白色、红色、蓝色)。我需要将这个图片转换成数字矩阵:1表示白色,2表示黑色,3表示红色等等。
例如,这张图片:
应该被转换为以下矩阵:
例如,这张图片:
![Chessboard](https://istack.dev59.com/gDqf4.gif)
[[1,2,1,2,1,2...]
[2,1,2,1,2,1...]
...]
我更倾向于使用Python实现解决方案。
[[1,2,1,2,1,2...]
[2,1,2,1,2,1...]
...]
我更倾向于使用Python实现解决方案。
我不确定SVG图像,但假设您有一种可由PIL读取的图像格式(例如GIF,TIFF,JPEG,BMP等)。然后可以使用以下方式使用PIL读取它:
import Image
img = Image.open("Chess_Board.bmp")
quantized = img.convert('P', palette=Image.ADAPTIVE, colors=4)
接下来,我想我们将其转换为numpy,以便更轻松地访问单个像素。然后,我们使用numpy的魔法来计算一个块中有多少个像素:
import numpy as np
a = np.array(quantized)
blockLengthX = np.argmin(a[0]==a[0,0])
blockLengthY = np.argmin(a[:,0]==a[0,0])
之后就很容易了。我们只需使用步长blockLengthX来访问列,使用blockLengthY来访问行,访问数组即可:
result = a[::blockLengthX, ::blockLengthY]
当然,这假设你的所有块都是完全相同的大小。 以下是完整的程序,以便更轻松地复制和粘贴。我还缩短了一些:
import Image
import numpy as np
img = Image.open("Chess_Board.bmp")
a = np.array(img.convert('P', palette=Image.ADAPTIVE, colors=4))
blockLengthX = np.argmin(a[0]==a[0,0])
blockLengthY = np.argmin(a[:,0]==a[0,0])
result = a[::blockLengthX, ::blockLengthY]