Я пытаюсь преобразовать (сдвинуть) значения каждого пикселя в изображении HSV (взятом из кадра видео).
Идея состоит в том, чтобы инвертировать желтый и красный цвета в синий цвет (чтобы избежать использования трех пороговых значений позже в программе, когда я могу использовать только один), инвертируя красные и желтые значения в синие значения, используя следующее уравнение.
(Оттенок + 90)% 180 (в OpenCV 3 оттенок находится в диапазоне [0,180])
Вот что я придумал:
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV);
H = hsv[:,:,0]
mask= [H<75 and H>128]
print("orig",hsv[mask])
hsv[mask] = ((hsv[mask]+90) % 180)
К сожалению, это не работает, поскольку при таком подходе я выбираю весь канал оттенка, а не его значения в пикселях.
[H, :, :]
,[S, :, :]
и[V, :, :]
), но вы можете просто сделатьh, s, v = cv2.split(hsv)
, и ваша жизнь станет намного проще. - person alkasm   schedule 06.04.2018[:, :, H]
, но, похоже, вы это уловили. Ваш новый код должен работать, но, поскольку это множество массивов, вы захотите сделать это:mask = (H<75) & (H>128)
. Тогда ваш код выше будет работать. - person alkasm   schedule 06.04.2018and
в Python работает только с логическими значениями, ноH<75
является массивом логических значений, а не прямым логическим значением. Итак, для numpy массивов&
делает то, что вы ожидаете (поэлементные логические операции). - person alkasm   schedule 06.04.2018OR
их вместе, а неAND
. Очевидно, никакие пиксели не могут быть одновременно ‹75 и› 128. - person alkasm   schedule 06.04.2018