#python #opencv #nonetype #aruco
Вопрос:
Я пытаюсь работать с маркерами ArUco, используя OpenCV в python.
vidcap = cv2.VideoCapture(0)
vidcap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
c = np.array(np.zeros([9,4,2]))
while vidcap.isOpened():
exists,image = vidcap.read()
if exists:
image = cv2.resize(image, (1200, 800))
arucodict = aruco.Dictionary_get(aruco.DICT_6X6_50)
arucoparams = aruco.DetectorParameters_create()
(corners, id, rejected) = aruco.detectMarkers(image, arucodict, parameters=arucoparams)
for (a,b) in zip(corners,id):
if b in range(0,10):
c[b-1]=a
Оператор for выдает ошибку
для (a,b) в zip(углы,идентификатор):
Ошибка типа: объект «Нетип» не может быть повторен
Что я делаю не так?
Комментарии:
1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Обратная связь») в вопрос (не комментарий) в виде текста (не скриншот, не ссылка на внешний портал). Есть и другая полезная информация.
2. если ошибка показывает вам , какая строка создает проблему, то сначала вы можете использовать
print()
ее,print(type())
чтобы проверить, что у вас есть в переменных. Похоже, у вас естьNone
corners
илиid
, и только вы можете проверить это с помощьюprint()
. И когда вы узнаете, какая переменная имеетNone
значение, вам нужно проверить код, который дает этоNone
detectMarkers
— и вам нужно будет выяснить, почему это даетNone
. У нас нет ваших данных, мы не можем запустить ваш код, поэтому мы не можем проверить, почему он выдаетNone
.
Ответ №1:
Если vidcap предоставляет вам те же входные данные, что и я (поскольку я не знаю, что вы ищете на изображении), вы, скорее всего, пытаетесь работать с пустым списком; в частности, с углами. Я добавил чек на это:
vidcap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
c = np.array(np.zeros([9,4,2]))
while vidcap.isOpened():
exists,image = vidcap.read()
if exists:
image = cv2.resize(image, (1200, 800))
arucodict = aruco.Dictionary_get(aruco.DICT_6X6_50)
arucoparams = aruco.DetectorParameters_create()
(corners, id, rejected) = aruco.detectMarkers(image, arucodict, parameters=arucoparams)
if corners:
for (a,b) in zip(corners,id):
if b in range(0,10):
c[b-1]=a