我在RGB
中有两组具有相同长度的值XYZ
和np.arrays
。 RGB
和XYZ
中的值对应于两个不同颜色空间中的相同值,它们在矢量中的外观顺序是相同的。
我有另一个数组RGB_picture
,其中包含与RGB
中列出的值类似的值。
我想找到一种方法,将RGB
中的RGB_picture
值替换为新数组XYZ
中相应的XYZ_picture
值。
示例:
RGB = np.array([[0,0,0], [0,0,1], [0,1,0], [0,1,1], [1,0,0], [1,0,1], [1,1,1]])
XYZ = np.array([[0.237,0.32,0.8642], [0.43234,0.34,1], [0.2432,.31,0.324], [0.3242,1.324,1.234], [1.32,0.4,0.23], [1.432,0.32423,1.342], [1.234,1.324,1.324324]])
#6 pixels image
RGB_image = np.array([[[0,0,1],[0,0,1],[0,0,1],
[0,1,1],[1,0,0],[1,0,1]]])
"""I want to return this"""
>print XYZ_image
>[[0.43234,0.34,1],[0.43234,0.34,1],[0.43234,0.34,1]],
>[0.3242,1.324,1.234], [1.32,0.4,0.23], [1.432,0.32423,1.342]]
我试着用numpy做但却找不到怎么样,你会帮忙吗?
这是我所拥有的,但它不是一个笨拙的解决方案,所以它很慢:
XYZ_image = np.zeros_like(RGB_image)
w, h = RGB_image.shape
for i in xrange(w):
for j in xrange(h):
pixel = RGB_image[i,j]
for k in xrange(len(RGB)):
rgb = RGB[k]
if rgb == pixel:
XYZ_image[i,j] = XYZ[k]
break
答案 0 :(得分:1)
听起来您正在尝试将RGB值用作索引。您可以使用常规Python解决此问题。做一个
的词典my_dict = {RGB_value_1: XYZ_Value_1, RGB_value_2: XYZ_Value_2, etc}
然后为RGB_picture中的每个值
my_dict[RGB_picture_value]
编辑:使用您的代码
my_dict = {RGB[i]: XYZ[i] for i in range(len(RGB))}
return [my_dict[x] for x in RGB_image]
请注意,为此,RGB和RGB_picture值必须是不可变的(如元组)