gpt4 book ai didi

python - 将图像转换为值矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:45 24 4
gpt4 key购买 nike

我有一个像棋盘一样的图像,有 4 种颜色(黑、白、红、蓝)。我必须将此图像转换为数字矩阵:1 代表白色,2 代表黑色,3 代表红色等等。

例如图片:

Chessboard

应该转换为矩阵:

[[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")

现在我们想做 quantization ,所以图像像素不再是 RGB,而是从 0 到 3 的颜色索引(假设你想要 4 种不同的颜色):

quantized = img.convert('P', palette=Image.ADAPTIVE, colors=4)

接下来我想我们将其转换为 numpy 以便于访问各个像素。然后我们使用 numpy 魔法来计算一个 block 中有多少个:

import numpy as np
a = np.array(quantized)
blockLengthX = np.argmin(a[0]==a[0,0])
blockLengthY = np.argmin(a[:,0]==a[0,0])

之后就很简单了。我们只是使用 stepsize blockLengthX 来访问数组,对于列使用 stepsize blockLengthX,对于行使用 blockLengthY:

result = a[::blockLengthX, ::blockLengthY]

当然,这假设您所有的 block 都完全大小相同。这是更容易复制和粘贴的完整程序。我也缩短了一点:

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]

关于python - 将图像转换为值矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11211914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com