Opencv TypeError: points n'est pas un tableau numpy, ni un scalaire
En gros, j'ai ce code qui détecte les changements de contexte et enfermé. Lorsque j'exécute le code, j'obtiens cette erreur:
Traceback (most recent call last):
File "cam2.py", line 28, in <module>
vertices = cv2.boundingRect(list(contours))
TypeError: points is not a numpy array, neither a scalar
Code:
import cv2
import numpy as np
c = cv2.VideoCapture(0)
_,f = c.read()
avg1 = np.float32(f)
while(1):
_,f = c.read()
cv2.accumulateWeighted(f,avg1,0.1)
res1 = cv2.convertScaleAbs(avg1)
absdiff = cv2.absdiff(f,res1)
graydiff = cv2.cvtColor(absdiff, cv2.COLOR_BGR2GRAY)
retval, mask = cv2.threshold(graydiff, 50,255,cv2.THRESH_BINARY)
mask = cv2.dilate(mask, None, 18)
mask = cv2.erode(mask, None, 10)
contours = cv2.findContours(mask, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE) #not right
while contours:
vertices = cv2.boundingRect(list(contours))
interest = vertices
point1 = (interest[0], interest[1])
point2 = (interest[0] + interest[2], interest[1] + interest[3])
cv2.rectangle(f, point1, point2, cv2.RGB(255,0,0), 1)
cv2.rectangle(mask, point1, point2, cv2.RGB(255,255,255), 1)
contours = contours.h_next()
cv2.imshow('mask',mask)
cv2.imshow('img',f)
cv2.imshow('avg1',res1)
k = cv2.waitKey(20)
if k == 27:
break
cv2.destroyAllWindows()
c.release()
Comment puis-je résoudre ce problème? Merci.
- Avez-vous le suivi de votre code!? Quelle était la valeur de la
contours
liste? - la valeur est un très long tableau heres un extrait de: [[ 995, 1018]], [[ 995, 1019]], [[ 995, 1020]], [[ 995, 1021]],
- Il semble que vous avez 4 contours de chacun d'entre eux contient qu'un point!?
- Alors, comment serait d'obtenir plusieurs points à la place?
- Pouvez-vous partager votre image?
- il l'habitude de la sortie de quelque chose en raison de l'erreur
- Hmm, Êtes-vous sûr que votre lecture image n'est pas vide?
- Oui, parce que je m'en souviens de travail avant que je gênais ajoutant les contours des trucs
Vous devez vous connecter pour publier un commentaire.
Selon la findContour doc il renvoie à deux choses:
Modifiez la ligne:
Qu'!
contours est en fait un double tableau. de l'extérieur est la liste de contours, les internes sont les points d'un seul contour.
donc, remplacer:
avec:
et déposer les
ligne (vous avez probablement confondu cv2 avec l'ancien c-api/cv approche, qui a été à l'aide de listes liées sous le capot)