Как определять цвета по одному - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно определить два цвета, один за другим. Итак, это пример рабочего процесса моей программы:
обнаружение и объект с заданным c цветом, после того, как этот объект окажется достаточно близко (указано сколько) к камере,
программа должна попытаться начать поиск другой цвет.

это то, что я пробовал до сих пор

# All python's imports

vs = VideoStream(src=0).start()
# Defining the two colors bound
blueLower = np.array([110, 50, 50])
blueUpper = np.array([130, 255, 255])

greenLower = np.array([29, 86, 6])
greenUpper = np.array([64, 255, 255])

# Defining a function to start the loop so i can later rerun it with different color bounds
def loop(lower, upper):

    while True:
    ....
    ....

# If the object is close enough, change the loopj arguments to search for a new color
    if radius > 250:
      loop(greenLower, greenUpper)

Что происходит, когда радиус больше 250, он просто воспроизводит оригинал

1 Ответ

1 голос
/ 27 мая 2020

Вы можете добиться этого с помощью itertools, который находится в стандартной библиотеке (вам не нужно устанавливать, просто импортируйте). Хотя есть и другие способы переключения между значениями, этот удобный. Я изменил некоторые части вашего кода, вы можете сообщить мне, если что-то не понимаете.

import itertools

blueLower = [110, 50, 50]
blueUpper = [130, 255, 255]

greenLower = [29, 86, 6]
greenUpper = [64, 255, 255]

greenBounds = (greenLower, greenUpper)
blueBounds = (blueLower, blueUpper)


def loop(colorBounds, iterator):
    radius = 0
    lower, upper = colorBounds
    print(lower, upper)
    while True:
        radius += 1
        if radius > 250:
            loop(iterator(), iterator)

toggle = itertools.cycle([greenBounds, blueBounds]).__next__
loop(greenBounds, toggle)

Чтобы уточнить, я добавил radius=0 и radius += 1 для собственных целей тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...