Проверьте, является ли переменная ни одним, но пропустите, если только один объект / массив - PullRequest
1 голос
/ 14 октября 2019

Я использую библиотеку cv2 для обнаружения объектов на изображении. Эта функция circles = cv2.HoughCircles(..) может возвращать None или массив окружностей, найденных на изображении. Проблема, которую я нахожу, состоит в том, чтобы проверить, найден ли круг.

Это может быть вызвано тем, что:
circle - Выходной вектор найденных кругов. Каждый вектор кодируется как 3-элементный вектор с плавающей точкой (x, y, радиус)

Так как я могу проверить, вернула ли эта функция 3 окружности или только 1 окружность (и она имеет 3 значения)? Моя проверка работает, если круг не найден, тогда я получаю ошибку.

Код:

circles = cv2.HoughCircles(..)
if circles != None:
    if circles.any():
        #DOSOMETHING

Ошибка в строке if circles != None::
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Почему это даже ошибка, а не предупреждение?

Вопрос: как пройти с массивом окружностей или одним кружком? Как я могу отличить их внутри?

1 Ответ

4 голосов
/ 14 октября 2019

Как вы также можете видеть на PEP 8 , рекомендуемый способ проверить, является ли объект None, следующий:

if circles is not None:
    if len(circles) == 3:
        # DOSOMETHING
    else:
        # DOSOMETHING

Чтобы проверить, что массив circles содержит ровно 3 элемента, вам нужно только посмотреть на его длину.

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