首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将图像转换为值矩阵

将图像转换为值矩阵
EN

Stack Overflow用户
提问于 2012-06-27 00:33:33
回答 1查看 3.3K关注 0票数 3

我有一个图像,就像一个象棋棋盘与4种颜色(黑,白,红,蓝)。我必须将此图像转换为一个数字矩阵:1表示白色,2表示黑色,3表示红色,依此类推。

例如,图像:

应转换为矩阵:

代码语言:javascript
复制
[[1,2,1,2,1,2...]
[2,1,2,1,2,1...]
...]

我更喜欢使用python的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-27 01:47:45

我不确定SVG图像,但让我们假设你有一个PIL可读的图像格式(例如GIF,TIFF,JPEG,BMP,...)。然后你可以像这样使用PIL来阅读它:

代码语言:javascript
复制
import Image
img = Image.open("Chess_Board.bmp")

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

代码语言:javascript
复制
quantized = img.convert('P', palette=Image.ADAPTIVE, colors=4)

接下来,我假设我们将其转换为numpy,以便更容易地访问各个像素。然后我们使用numpy魔术来计算一个块中有多少个:

代码语言:javascript
复制
import numpy as np
a = np.array(quantized)
blockLengthX = np.argmin(a[0]==a[0,0])
blockLengthY = np.argmin(a[:,0]==a[0,0])

之后就很容易了。我们只需对cols使用stepsize blockLengthX,对行使用blockLengthY来访问数组:

代码语言:javascript
复制
result = a[::blockLengthX, ::blockLengthY]

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

代码语言:javascript
复制
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]
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11211914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档