У меня есть 3D-массив (х, у, RGBA) и моя цель:NumPy условно заменить скалярные/булеву с массивом
найти какие пиксели являются пустым RGBA = [0,0,0,0], то изменение их цвет - синий, а для других пикселей цвет меняется на зеленый.
Насколько я вижу это может быть сделано в 2 этапа:
1- создать 500x500 массив BOOL Истинного, если пиксель имеет значение, и False, если пустой
2- затем применить функцию замените True на [0,0,255,255] и False на [0,255,0, 255]
после многочисленных поисков (я не мастер python) Мне удалось достичь 1- в питоническом (по крайней мере, надежда). ..)
img.shape
>(500, 500, 4)
img_bool = np.equal(img[:,:], [0, 0, 0, 0]).all(axis=2)
img_bool.shape
>(500, 500)
мое предположение на шаге 2 пытается такой синтаксис:
img_final = np.where(img_bool, [0,0,255,255], [0,255,0,255])
или
np.choose(img_bool, [[0,0,255,255],[0,255,0,255], out=img_final)
но они дают ту же ошибку (вполне логично, поскольку оба выражения могли бы сделать то же самое на самом деле)
ValueError: shape mismatch: objects cannot be breascast to a single shape
Фактически, шаг 2 может быть выражен «заменой скалярного/булевого на массив/вектор в numpy.ndarray?»
очень аккуратный синтаксис. thx, все ваши ответы работают отлично. просто одно замечание: img.sum (axis = 2)> 0 может возвращать True, если массив пикселей был [0, -15, 15, 0] нет? но в моем случае он отлично работает, поскольку все значения являются положительными. thx снова. – comte
@comte да, может, я добавил разъяснения. Я оценил по значениям, равным 255, чтобы ваши цвета были позитивными. – alko