将字符串赋值给numpy.zeros数组

3

我已经编写了一个遍历低分辨率图像每个像素,并将每个像素的色相、饱和度和亮度级别(HSL)存储在数组中的代码。现在,我想遍历每个这些HSL级别,确定它最接近的颜色,并将此信息存储到一个新数组中。我已经编写了以下代码:

arrayCol = np.zeros((sHeight,sWidth), dtype = str)
for y in range(sHeight):
    for x in range(sWidth):
        #for n in range(3):
        if arrayHSL[y][x][2] <= 10:
            if arrayHSL[y][x][2] <= 10:
                arrayCol[y][x] = 'blk'

print(arrayCol)

如果亮度低于某个阈值,则将像素分配为“blk”或“black”。然而,在打印和查看数组时,它并没有在正确的位置显示“blk”,而是只显示了第一个字母“b”,如下所示:

[['' '' '' '' '' 'b' 'b' 'b' 'b' 'b' 'b' 'b' 'b' 'b' '' 'b' '' '' '' '']
 ['' '' '' '' '' '' 'b' 'b' 'b' 'b' '' 'b' 'b' '' '' '' '' '' '' '']
 ['b' '' '' '' '' '' '' '' 'b' 'b' 'b' 'b' 'b' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '' '' 'b' 'b' 'b' '' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '' '' '' 'b' '' '' '' '' '' '' '' '' '']
 ['' '' '' '' '' 'b' '' '' '' '' '' 'b' '' '' '' '' '' '' '' '']
 ['' 'b' '' 'b' '' '' '' '' '' '' 'b' 'b' '' '' '' '' '' '' '' '']
 ['' '' '' 'b' '' 'b' '' '' '' '' '' '' '' 'b' '' '' '' '' '' '']
 ['' '' 'b' '' '' 'b' 'b' 'b' '' '' '' '' '' 'b' '' '' '' '' '' '']
 ['' '' 'b' 'b' '' 'b' '' 'b' '' 'b' 'b' '' 'b' 'b' '' '' '' '' '' '']
 ['b' '' 'b' '' 'b' '' '' '' 'b' 'b' '' 'b' 'b' 'b' '' '' '' 'b' '' '']
 ['b' 'b' 'b' 'b' 'b' 'b' 'b' '' '' '' '' 'b' '' 'b' '' '' '' '' '' '']

将名称“blk”更改为其他名称,例如“rlk”,只显示一个“r”。这不是什么大问题,但是一旦我开始实现其他颜色,例如蓝色或棕色,我和Python都无法区分它们。因此,我的问题是如何使数组存储颜色的全名而不仅仅是第一个字母?谢谢。

2个回答

2
如果您键入arrayCol.dtype,它应该打印dtype('S1'),表示长度为1的字符串。 您可以指定dtype='s256'以获取固定长度,或者dtype=object以获取任意长度的字符串。 arrayCol = np.zeros((sHeight,sWidth), dtype = object)

太好了,这就解决了问题。dtype=object特别有帮助,因为现在我可以存储“darkBlue”等内容。谢谢! - tewi

0

这里有一个类似的问题已经得到解答:初始化numpy字符串数组时出现奇怪的行为

你需要将dtype=str替换为dtype='S[字符数]',对于'blk'来说应该是dtype='S3'

根据ArmorK的回答,你也可以使用dtype=object来处理任意长度的字符串。


啊,我没有找到这个。谢谢你指出来,这给了我一些有关某些函数的更多背景信息。 - tewi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接