Как убрать вложенные петли и использовать массив нуди - PullRequest
1 голос
/ 23 сентября 2019

У меня есть видео, состоящее из 580 кадров.Мне нужно иметь возможность обнаружить зеленый цвет из видео и создать маску, чтобы поставить нулевые значения, где зеленый найден, а остальные должны быть 255. Я конвертировал видео в формат HSV и использую вложенные для циклов и егоЭто заняло около часа. Мне было интересно, есть ли более быстрый способ сделать это?
Вот мой текущий код

for i in range(0, len(temp)):
   temp[i] = cv2.cvtColor(temp[i], cv2.COLOR_BGR2HSV)
for k in range(0, len(temp)):
    for i in range(0, len(temp[k])):
        for j in range(0, len(temp[k][i])):
           if(temp[k][i][j][0] > 50 and temp[k][i][j][0] < 65 and temp[k][i][j][2] > 150):
               temp1[k][i][j][0] = 0
               temp1[k][i][j][1] = 0
               temp1[k][i][j][2] = 0
           else:
               temp1[k][i][j][0] = 255
               temp1[k][i][j][1] = 255
               temp1[k][i][j][2] = 255

temp - это мой массив HSV, а temp1 - маска, которую я создаю.

1 Ответ

0 голосов
/ 23 сентября 2019

Не cv2 эксперт, но если он работает как numpy массивы, тогда.,,

for i in range(0, len(temp)):
   temp[i] = cv2.cvtColor(temp[i], cv2.COLOR_BGR2HSV)
   temp1[i] = (1 - cv2.inRange(temp[i], (50, 0, 150), (65, 255, 255)).astype(int)) * 255
...