result
является массивом Numpy и набирается , его тип является целым числом, и вы пытаетесь назначить целочисленный слот тройку целых чисел ... ничего хорошего.
Вам нужно создать пустое цветное изображение с такими же размерами result
и присвоить последней оси запрошенные тройки.
Я не установил cv2
, но вы можете посмотреть на следующий код, чтобы иметь представление о том, как действовать.
Эквивалент тому, что вы сделали, та же ошибка
In [36]: import numpy as np
In [37]: a = np.random.randint(0,2,(2,4))
In [38]: a
Out[38]:
array([[1, 0, 0, 0],
[0, 1, 0, 1]])
In [39]: a[a==1] = (1,2,3)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-39-24af4c8dbf5a> in <module>
----> 1 a[a==1] = (1,1)
ValueError: NumPy boolean array indexing assignment cannot assign 2 input values to the 3 output values where the mask is true
Теперь выделите трехмерный массив и примените к нему индексацию, назначив по умолчанию последнюю ось
In [40]: b = np.zeros((2,4,3))
In [41]: b[a==1] = (1,2,3)
In [42]: b
Out[42]:
array([[[1., 2., 3.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[1., 2., 3.],
[0., 0., 0.],
[1., 2., 3.]]])
У нас есть две внутренние матрицы (соответствующие двум строкам a
), в каждой матрице четыре строки (соответствующие четырем столбцам a
), и, наконец, столбцы - это нужные вам RGB-тройки.
Я не знаю точно, как располагаются данные на изображении cv2
, но я думаю, что вам нужно внести незначительные корректировки, если таковые вообще имеются.