NumPy где RGB канал больше, чем [0,0,0] - PullRequest
0 голосов
/ 06 ноября 2018

Пытаюсь найти цвета, которые не равны черному, и мне нужен самый быстрый способ сделать это. Задушить, код ниже работает для условий! =. Это не работает для> или =. Также я не хочу суммировать канал и искать значения больше 0 (это слишком медленно)

import numpy as np
x = np.zeros(shape=[2,10,3])
x[0,0]=np.array([0,0,255])
x[0,5]=np.array([255,0,0])
x[0,8]=np.array([255,0,0])
x[0,9]=np.array([255,0,0])
x[1,2]=np.array([0,0,255])
x[1,1]=np.array([255,0,0])
x[1,9]=np.array([255,0,0])
x[1,6]=np.array([255,0,0])

indices=(np.where(np.all(x[0,:]!=[0,0,0],axis=-1),))
print('values',x[i])

>> []

Спасибо за совет заранее

1 Ответ

0 голосов
/ 06 ноября 2018

IIUC, вы можете сделать это, чтобы найти, где массив имеет хотя бы одно ненулевое значение:

x[np.any(x != 0, axis = 2)]
# Or, using np.where as you were:
# np.where(np.any(x!=0, axis=2))
# (array([0, 0, 0, 0, 1, 1, 1, 1]), array([0, 5, 8, 9, 1, 2, 6, 9]))

Пример:

>>> x
array([[[  0.,   0., 255.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [255.,   0.,   0.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [255.,   0.,   0.],
        [255.,   0.,   0.]],

       [[  0.,   0.,   0.],
        [255.,   0.,   0.],
        [  0.,   0., 255.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [255.,   0.,   0.],
        [  0.,   0.,   0.],
        [  0.,   0.,   0.],
        [255.,   0.,   0.]]])

>>> x[np.any(x != 0, axis = 2)]
array([[  0.,   0., 255.],
       [255.,   0.,   0.],
       [255.,   0.,   0.],
       [255.,   0.,   0.],
       [255.,   0.,   0.],
       [  0.,   0., 255.],
       [255.,   0.,   0.],
       [255.,   0.,   0.]])
...