windowsfashion
Messages postés55Date d'inscriptionjeudi 21 avril 2005StatutMembreDernière intervention 2 juin 2007
-
4 mars 2006 à 00:49
windowsfashion
Messages postés55Date d'inscriptionjeudi 21 avril 2005StatutMembreDernière intervention 2 juin 2007
-
6 mars 2006 à 22:15
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)
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 mars 2006 à 01:58
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(...)
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 4 mars 2006 à 02:04
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).
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 4 mars 2006 à 19:48
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.
windowsfashion
Messages postés55Date d'inscriptionjeudi 21 avril 2005StatutMembreDernière intervention 2 juin 2007 5 mars 2006 à 13:31
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!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDernière intervention 7 juillet 2014 5 mars 2006 à 17:29
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.