2016-03-19 13 views
0

Ich benutze OpenCV auf dem Raspberry Pi und Gebäude mit Python. Der Versuch, einen einfachen Objekt-Tracker zu erstellen, der Farbe verwendet, um das Objekt zu finden, indem das Bild in einer Schwellwertlinie angeordnet wird und die Konturen gefunden werden, um den Schwerpunkt zu lokalisieren. Wenn ich den folgenden Code verwende:Verwenden von findContours in Python mit 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) 

Ich bekomme den folgenden Fehler.

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

Ich habe ein paar andere Einstellungen ausprobiert und bekommen den gleichen Fehler oder

ValueError: too many values to unpack 

ich die PiCamera verwenden. Irgendwelche Vorschläge, um Zentroidposition zu bekommen?

Dank

Z

Antwort

1

Fehler 1:

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

steht lediglich, dass die cv2.findContours() Methode keine Konturen in dem gegebenen Bild gefunden haben, so ist es immer eine geistige Gesundheit zu tun, wird vorgeschlagen, Überprüfung vor dem Zugriff auf die Kontur, wie:

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

Fehler 2

ValueError: too many values to unpack 

Dieser Fehler wird durch nur zwei Werte, da die cv2.findContours kehrt zu _,contours,_ = cv2.findContours, angehoben, Konturen und Hierarchie, so offensichtlich, wenn Sie versuchen, 3 Werte von 2 Elemente Tupel durch die cv2.findContours, es würde erhöht die zurück auspacken oben genannter Fehler.

Auch die cv2.findContours ändert die Eingangsmatte an Ort und Stelle, so wird vorgeschlagen, die nennen cv2.findContours als:

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."