Salut tout le monde Im très nouveau à la programmation et python-opencv en général, ive déjà cherché une réponse pour cela, mais je ne pouvais pas le trouver.Nouveau sur Python Opencv: Motion Tracking avec webcam Seuil/dilatation
Im essayant de faire le suivi de mouvement en utilisant ma webcam par:
- prenant la différence absolue de l'image courante et l'image précédente
- Ceci est converti en niveau de gris et courir à travers un filtre de seuil de sorte que seuls les pixels qui ont changé (c'est-à-dire où il y a du mouvement) seront blancs. Tous les autres pixels seront noirs.
Mais je reçois une erreur lorsque je tente de seuil et l'application de la dilatent dans la différence des cadres:
t_minus_dilate = cv2.dilate(t_minus_thresh, es)
TypeError: <unknown> is not a numpy array
Cela signifie que le cadre utilisé n'est pas un tableau numpy?
Heres partie de mon code:
cv2.namedWindow("window_b", cv2.CV_WINDOW_AUTOSIZE)
# Structuring element
es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9,4))
## Webcam Settings
capture = cv2.VideoCapture(0)
def diffImg(t0, t1, t2): #calculates the difference between frames
d1 = cv2.absdiff(t2, t1)
d2 = cv2.absdiff(t1, t0)
return cv2.bitwise_and(d1, d2)
t_minus = cv2.cvtColor(capture.read()[1], cv2.COLOR_RGB2GRAY)
t_minus_thresh = cv2.threshold(t_minus, 0, 255, cv2.THRESH_OTSU)
t_minus_dilate = cv2.dilate(t_minus_thresh, es)
t = cv2.cvtColor(capture.read()[1], cv2.COLOR_RGB2GRAY)
t_thresh = cv2.threshold(t, 0, 255, cv2.THRESH_OTSU)
t_dilate = cv2.dilate(t_minus_thresh, es)
t_plus = cv2.cvtColor(capture.read()[1], cv2.COLOR_RGB2GRAY)
t_plus_thresh = cv2.threshold(t_plus, 0, 255, cv2.THRESH_OTSU)
t_plus_dilate = cv2.dilate(t_plus_thresh, es)
while True:
diff = diffImg(t_minus_dilate, t_dilate, t_plus_dilate) #difference between the frames
cv2.imshow('window_b',diff)
t_minus_dilate = t_dilate
t = diff
t_plus_dilate = cv2.dilate(diff, es)
key = cv2.waitKey(10) #20
if key == 27: #exit on ESC
cv2.destroyAllWindows()
break
Je ne sais pas c'est le meilleur moyen d'utiliser cela, mais Im va utiliser ce code pour faire un jeu que l'objectif est de faire éclater les bulles qui tombent sur la écran, s'il y a un mouvement où la bulle est positionnée (s'il y a des pixels blancs) la bulle est éclatée.
Merci à l'avance