ValueError:utiliser un.tout() ou une.tous les() et AttributeError: 'bool' objet n'a pas d'attribut de 'tous' python
Je suis en train d'exécuter ce code:
if (numObj<Max_DetObj):
i=0
while (i >= 0).all():
Moment = cv2.moments(contours[i])
area = Moment['m00']
if (area >Min_ObjArea):
x=Moment['m10']/area
y=Moment['m01']/area
found_Obj=True
else:
found_Obj=False
i=hierarchy[i][0]
mais j'obtiens cette erreur:
Traceback (most recent call last):
File "C:\opencv2.4.8\sources\samples\python2\Work.py", line 120, in <module>
trackObj(threshold,hsv,frame)
File "C:\opencv2.4.8\sources\samples\python2\Work.py", line 84, in trackObj
while i >= 0:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
et quand j'ajoute tous() ou() dans la ligne, j'obtiens cette erreur:
AttributeError: 'bool' object has no attribute 'all'
quelqu'un peut-il m'expliquer ?!!
- Qu'essayez-vous de faire?
i
est un numéro unique, de sorte qu'il n'a pas deall
. Pourquoi ne pas simplement fairewhile i >= 0
? - Lorsque vous obtenez une erreur, montre-nous le plein de trace de pile, pas seulement l'exception
- Je l'ai fait mais j'obtiens le même message d'erreur
Vous devez vous connecter pour publier un commentaire.
i
est unlist
. Nous n'avons pas l'information sur ce qu'il contient, mais l'erreur et la solution est clair.Pour l'argument, disons
i
est:Vous ne pouvez pas comparer une liste avec
>=
. Ce que vous voulez faire à la place est de comparer chaque élément de la liste. Parce que vous êtes à la comparant à>= 0
, il est assez facile de simplement vérifier son truthiness avecany()
etall()
:Donc, dans votre code, ce serait:
ou
Où vous seul savez ce qui conviendrait, selon que vous voulez vérifier si elles sont toutes >= 0, ou un seul suffirait.
Tout
:All
:i
après chaque tour de boucle pour vérifier quei = 0
. Changement d'une liste, comme[1]
Je suppose que vous utilisez des tableaux numpy d'infiltration, de sorte que vous devriez utiliser numpy fonctions.
Voir ce code qui reproduit votre stacktrace: