Данный трехмерный массив плавающих пикселей RGB с размерами X, Y, RGB.
rgb = array([[[ 1.11204494, 0.17241406, 0.14145795],
[ 0.98240261, 0.16112416, 0.11333147]],
[[ 0.1320549 , 0.11862232, 0.16630839],
[ 0.10424024, 1.12368929, 0.15233576]]])
Пиксели 0 и 3 превышают предел 1,0. Правильное отсечение — установить для всего пикселя значение [1.0,1.0,1,0].
rgb = array([[[ 1.0 , 1.0, 1.0],
[ 0.98240261, 0.16112416, 0.11333147]],
[[ 0.1320549, 0.11862232, 0.16630839],
[ 1.0, 1.0 , 1.0]]])
Мой способ сделать это очень прост:
x,y,c = np.where(rgb > 1.0)
rgb[x, y, :] = 1.0
Есть ли более быстрый способ?
Любая помощь приветствуется
Ура Волкер
Не рассчитано время, но я думаю, что вы можете начать с
np.any(rgb,axis=2)
, поэтому вам не нужно тестировать все 3 элемента, если любой из первых 2 элементов превышает 1,0У Марка Сетчелла есть хорошая идея: rgb[np.any(rgb>1,axis=2)]=1.0
@AlexAlex Спасибо, что исправили мое упущение 👍
@Марк Сетчелл, можешь написать ответ?
@AlexAlex Здесь, в Великобритании, уже поздно, поэтому, пожалуйста, напишите, если хотите. В противном случае я сделаю это завтра.
Не могли бы вы указать размер вашего изображения - я имею в виду
X
иY
- чтобы мои тайминги были реалистичными? Спасибо.