2016-03-19 8 views
0

Я использую OpenCV на малине pi и здании с Python. Попытка создать простой объект-трекер, который использует цвет, чтобы найти объект, порождая изображение и находя контуры, чтобы найти центр тяжести. Когда я использую следующий код:Использование findContours в Python с OpenCV

image=frame.array 
imgThresholded=cv2.inRange(image,lower,upper)  
_,contours,_=cv2.findContours(imgThresholded,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) 
cnt=contours[0] 
Moments = cv2.moments(cnt) 
Area = cv2.contourArea(cnt) 

Я получаю следующее сообщение об ошибке.

Traceback (most recent call last): 
File "realtime.py", line 122, in <module> 
    cnt=contours[0] 
IndexError: list index out of range 

Я попробовал несколько других параметров и получить ту же ошибку или

ValueError: too many values to unpack 

Я использую PiCamera. Любые предложения для получения позиции по центру?

Благодаря

Z

ответ

1

Ошибка 1:

Traceback (most recent call last): 
File "realtime.py", line 122, in <module> 
    cnt=contours[0] 
IndexError: list index out of range 

Просто стоит, что метод cv2.findContours() не нашел каких-либо контуров в данном изображении, так что предлагается сделать здравомыслие проверка перед доступом к контуру, как:

if len(contours) > 0: 
    # Processing here. 
else: 
    print "Sorry No contour Found." 

Ошибка 2

ValueError: too many values to unpack 

Эта ошибка возникает из-за _,contours,_ = cv2.findContours, поскольку cv2.findContours возвращает только 2 значения, контуры и иерархии, поэтому, очевидно, при попытке распаковать 3 значения от 2 элемента кортежа, возвращаемого cv2.findContours, было бы поднять вышеупомянутая ошибка.

Также cv2.findContours изменяет входной коврик на месте, поэтому он предложил назвать cv2.findContours как:

contours, hierarchy = cv2.findContours(imgThresholded.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 
if len(contours) > 0: 
    # Processing here. 
else: 
    print "Sorry No contour Found."