我有一个包含RGBA值的数组,类似于这样:
# Not all elements are [0, 0, 0, 0]
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
...,
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
我还有一个函数,它会返回一个最接近某个RGBA值的5个值中的一个(绿色、红色、橙色、棕色、白色)。
def closest_colour(requested_colour):
min_colours = {}
for key, name in webcolors.CSS3_HEX_TO_NAMES.items():
if name in ['green', 'red', 'orange', 'brown', 'white']:
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
rd = (r_c - requested_colour[0]) ** 2
gd = (g_c - requested_colour[1]) ** 2
bd = (b_c - requested_colour[2]) ** 2
min_colours[(rd + gd + bd)] = name
return min_colours[min(min_colours.keys())]
我想将此函数应用于我的numpy数组的每个元素并更改这些元素。我尝试了以下方式:
img_array[closest_colour(img_array) == 'green'] = (0, 255, 0, 1)
img_array[closest_colour(img_array) == 'red'] = (255, 0, 0, 1)
img_array[closest_colour(img_array) == 'brown'] = (92, 64, 51, 1)
img_array[closest_colour(img_array) == 'orange'] = (255, 165, 0, 1)
img_array[closest_colour(img_array) == 'white'] = (255, 255, 255, 0)
但是我遇到了一个错误:
TypeError: unhashable type: 'numpy.ndarray'
我知道为什么会出现这个错误,但我也不知道有没有更有效的方法来做到这一点。 由于我正在处理一个相当大的数组(图像),所以有没有更有效的方法来实现呢?
array([[[0,0,0,0], [0,0,0,0], ...]])
。因此,是否需要对代码进行更改? - Jamess11