我有两个numpy数组,一个是RGB
图像,一个是像素值的查找表,例如:
img = np.random.randint(0, 9 , (3, 3, 3))
lut = np.random.randint(0, 9, (1,3,3))
我想知道的是x,y
像素中lut
坐标的值img
和lut
的共同点,所以我试过了:
for x in xrange(img.shape[0]):
for y in xrange(img.shape[1]):
print np.transpose(np.concatenate(np.where(lut == img[x,y])))
此时,问题是img[x,y]
([int_r, int_g, int_b]
形式的img
不会被评估为单个元素,因此在{{1}中单独寻找三个组件}} ...
我希望输出类似于:
(x_coord, y_coord)
但我只能以下列形式获得输出:
[0 0 0]
[0 2 1]
[0 0 2]
[0 0 0]
[0 0 0]
[0 0 2]
[0 0 1]
[0 2 2]
[0 1 2]
有人可以帮忙吗?谢谢!
答案 0 :(得分:1)
img = np.random.randint(0, 9 , (3, 3, 3))
lut2 = img[1,2,:] # so that we know exactly the answer
# compare two matrices
img == lut2
array([[[False, False, False],
[False, False, False],
[False, True, False]],
[[False, False, False],
[False, False, False],
[ True, True, True]],
[[ True, False, False],
[ True, False, False],
[False, False, False]]], dtype=bool)
# rows with all true are the matching ones
np.where( (img == lut2).sum(axis=2) == 3 )
(array([1]), array([2]))
我真的不知道为什么lut充满了随机数。但是,我认为你想要寻找具有完全相同颜色的像素。如果是这样,这似乎有效。这是你需要做的吗?
答案 1 :(得分:0)
如果将lut
定义为单个[r,g,b]像素切片,则@otterb的答案有效,但如果要将此过程推广到a,则需要稍微调整一下多像素lut
:
img = np.random.randint(0, 9 , (3, 3, 3))
lut2 = img[0:1,0:2,:]
for x in xrange(lut2.shape[0]):
for y in xrange(lut2.shape[1]):
print lut2[x,y]
print np.concatenate(np.where( (img == lut2[x,y]).sum(axis=2) == 3 ))
的产率:
[1 1 7]
[0 0]
[8 7 4]
[0 1]
其中三元组是像素值,双重是lut
中的坐标。
干杯,感谢@otterb!
PS:对numpy数组的迭代很糟糕。以上不是生产代码。