У меня есть массив изображений 2d, в котором каждый пиксель содержит значение rgb (я думаю, bgr в opencv), и я пытаюсь получить новый массив 2d, который вместо этого имеет сумму каждого пикселя.
например
стартовое изображение:
форма: (1080,1920,3)
[[[255,255,255], [0,0,0]], [[0,120,255], [0,255,0]]]
результат:
форма: (1080,1920,1)
[[[765],[0]], [[375],[255]]]
Я уверен, что есть простое решение Numpy, которого я еще не знаю...
Любая помощь будет принята с благодарностью!
mono = rgb.sum(axis=2)
Получается форма (1080,1920). Если вам действительно нужно, чтобы у него было третье измерение, вы можете использовать reshape
.
Кстати, если вы действительно пытаетесь создать монохром, это не лучший способ. Есть формула для преобразования RGB в моно, и у OpenCV есть инструменты для этого.
Вы уверены, что это двумерный массив? Обычно массивы изображений трехмерные, с формой (высота, ширина, n_channels). Если у вас есть такой массив, вы можете использовать метод sum
для массива, суммируя по оси канала.
например.
In [1]: a = np.random.randint(0, 10, (2, 3, 4))
In [2]: a
Out[2]:
array([[[5, 1, 7, 0],
[7, 3, 1, 5],
[5, 7, 0, 2]],
[[5, 2, 0, 9],
[4, 7, 4, 4],
[0, 7, 1, 3]]])
In [3]: a.sum(axis=-1)
Out[3]:
array([[13, 16, 14],
[16, 19, 11]])
Это идеально спасибо. Нет, я не пытаюсь получить монохромный, но спасибо за советы!