Detection de movement grâce à la webcam

Signaler
Messages postés
55
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
2 juin 2007
-
Messages postés
55
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
2 juin 2007
-
Bonjour



J'ai récuperé une excellente source ici mais je n'arrive pas à utliser la fonction de detection de mouvement...

La fonction:



void CWebCam::CalMouvement(int ID_Bmp1, int ID_Bmp2, int ID_Bmp3)

{

int i, j; // Bcl



// Parcoure les pixels

for(i=0; i

6 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Premièrement ça tout l'air d'etre une classe alors pour l'apeller c'est par exemple:

CWebCam WebCam;
WebCam.CalMouvement(...);

Ensuite pour renvoyer 1 pour un mouvement bien tu ajoute logiquement return 1 avant le else
// Calcul la couleur final
TblImage[ID_Bmp3].points[i][j].Couleur= TblImage[ID_Bmp3].points[i][j].R+
TblImage[ID_Bmp3].points[i][j].G*256+
TblImage[ID_Bmp3].points[i][j].B*256*256;
return 1 ;

et return 0 à la fin du else
// Sinon on met tous en noir
TblImage[ID_Bmp3].points[i][j].B =0;
TblImage[ID_Bmp3].points[i][j].G=0;
TblImage[ID_Bmp3].points[i][j].R=0;
TblImage[ID_Bmp3].points[i][j].Couleur=0;
return 0;

mais il faut cepandent que cette fonction soit de type int car void ne revoie rien. Donc ta fonction n'est plus void CWebCam::CalMouvement(int ID_Bmp1, int ID_Bmp2, int ID_Bmp3) mais int CWebCam::CalMouvement(int ID_Bmp1, int ID_Bmp2, int ID_Bmp3)

Il faudra probablement que tu change aussi le type de cette fonction dans la classe CWebCam elle même. Dans la classe CWebCam, il va y avoir une fonction nommer void CalMouvement(...). Bien renomme la int CalMouvement(...)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Non oublie ce que jai dit pour les return. Je vien de voir les for. Ça marchera pas. Ça aura comme effet d'annuler la boucle. Bon pour le return je ne sais pas comment faire mais pour l'apelle de la fonction ça devrais être correct. Si tu utilise cette fonction quand meme sans les return, bien ne modifie pas le type de la fonction tout de suite. Si tu veut la modifier quand meme, rajoute un return 0 a la fin de la fonction (au moin la modification sera faite).
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Si je comprends bien cet algorithme te donne une sorte d'image "radar" de ce qui se passe, l'image va varier en fonction du mouvement. Au lieu de ça tu n'a qu'a faire :

int CWebCam::CalMouvement(int ID_Bmp1, int ID_Bmp2, int ID_Bmp3)
{
int i, j; // Bcl

int Ressemblance = 0;

// Parcoure les pixels
for (i =0; i<240; i++)
for(j=0; j<320; j++)
{
// Si il y a mouvement
if(CalRessemblance(TblImage[ID_Bmp1].points[i][j], TblImage[ID_Bmp2].points[i][j], 70))
Ressemblance++;
}

if ((double)Ressemblance / ((double)240*(double)320)) < 0.80) //Tu peux faire varier le 0.80 pour ajuster la sensibilité
return 1;
else
return 0;
}

Ici on compte les pixels qui ressemble au précédent et on fait un taux. Si le taux est plus petit que 80 c'est qu'il y a eu du mouvement.

if ()
@+ ;<
Messages postés
55
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
2 juin 2007

merci pour votre aide



Je met WebCam.CalMouvement();
pour appeler la classe, sa c'est bon mais je sais pas ce que je dois
mettre entre parenthéses pour (int ID_Bmp1, int ID_Bmp2, int ID_Bmp3)



thanks!
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Si je me souviens bien (car je sais de qu'elle source tu t'es inspiré) le int ID dans les 3 cas représente un tableau contenant les pixels. Le paramètre 3 peut être retiré (dsl j'avais pas pensé à le faire lors de mon dernier post) les deux premier représente les images que tu veux comparer, tu passe en premier paramètre l'image actuelle et en second paramètre l'ancienne image avec laquel comparer. Mais malheureusement je part donc je n'ai aps le temps de regarder la soruce à nouveau.

if ()
@+ ;<
Messages postés
55
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
2 juin 2007

merci pour ton aide max12



je vais voir comment je pourait faire mais si ta un exemple pas de probléme



Thanks