2016-05-04 7 views
0

Ich schreibe ein Stück Code, der prüft, ob ein um eine Form erzeugtes Begrenzungsrechteck innerhalb eines anderen festen Rechtecks ​​liegt . Dies ist der Code-Abschnitt, wo der Fehler vorliegt:Variable ändert sich in eine Liste, die ValueError verursacht: Verwenden Sie a.any() oder a.all() Opencv Python

rectangle = cv2.rectangle(frame, (150, 50), (450, 400), (0, 255, 0), 2) 

if ID != -1: 
    cnt = contours[ID] 
    x, y, w, h = cv2.boundingRect(cnt) 
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 
    x2 = x+w 
    y2 = y+h 

if x > 150: 
    if y > 50: 
     if x2 < 450: 
      if y2 < 400: 
       print "inside" 

N. B Zurück Teile des Codes die größte Kontur finden und ein Begrenzungsrechteck um ihn herum zu ziehen. Dieser Teil funktioniert gut, ich dachte nur, ich würde es für ein bisschen Kontext erwähnen.

Die im Fehler bekommen ist:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

Das Problem ist, das Programm funktioniert für eine Weile, Druck im Inneren succeessfully, wenn die Form innerhalb des Rechtecks ​​ist. Nach einer Weile stürzt das Programm jedoch ab und zeigt die Fehlermeldung an.

Davon denke ich, dass die Variable x aus irgendeinem Grund in eine Liste konvertiert, da dies die Zeile ist, in der der Fehler auftritt.

Würde jemand wissen, wie man das behebt? Vielen Dank.

+1

Woher erhält x seinen Wert, wenn ID gleich -1 ist? – Kevin

+0

Verwenden Sie 'numpy' in diesem Programm zufällig? – ppperry

+0

Liegt das an einem Einzugsproblem? Sollten 'if x ...' und andere Vergleiche nur dann stattfinden, wenn 'ID! = -1' –

Antwort

0

Als Kevin und Gareth darauf hinwiesen, war es ein Einrückungsfehler. Wenn ID -1 war, wurde x kein Wert zugewiesen (dasselbe gilt für y, x2, y2).

Verwandte Themen