我有一个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'
我知道为什么会发生这个错误,但我也不知道有什么不同的方法可以有效地做到这一点.
在我处理相当大的数组(图像)时,有没有一种方法可以有效地做到这一点?