IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

image acquisition C++


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut image acquisition C++
    Bonjour,
    je suis actuellement en stage, et je suis chargé d'acquérir une vidéo, à partir d'une camera branché via un pirt USB. Je suis complètement perdu quelqu'un pourrait t'il m'aidé. En gros la caméra fonctionne déja grâce à un petit soft dont je n'ai pas les sources. Comment ça marche?
    Lorsqu'on lance le petit soft en question, on telecharge une fichier .hex dans la mémoire de la caméra. et ensuite seulement on peut commencer à acquérir l'image. En gros je suis intéressé par la partie acquisition, qui est dans mon cas devra se faire sur une fenêtre MFC même si ce n'est pas ça le plus important. Quelqu'un aurait t'il la marche à suivre ou des éléments de réponse pour m'aider à affiner mes recherches car en effet je cherche depuis deux semaines environ, et je n'ai toujours pas bouger d'un poil. Merci

  2. #2
    Membre actif
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Par défaut
    Bonjour,

    Je ne sais pas si ma réponse est bonne, et je vais me baser sur ce que j'ai déjà fait. Avec OpenCV tu peux accéder à ton matériel d'acquisition d'image assez simplement. Bon moi je possède une webcam intégrée à mon laptop, mais je pense que si cette dernière est reconnue par le système d'exploitation tu peux y accéder via OpenCV.

    Alors en gros ça marche comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    /* Includes, standard. */
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Includes, OpenCV. */
    #include <opencv/cv.h>
    #include <opencv/highgui.h>
     
    /* ID de la webcam à capturer: 0 doit prendre la première webcam trouvée. */
    #define ID_WEBCAM 0
     
     
    int main() {
    	/* Variables. */
    	CvCapture *capture;
    	IplImage *image;
    	char key;
     
    	/* Initialiser les variables. */
    	capture = NULL;
    	image = NULL;
     
    	/* Initialiser la capture de la webcam. */
    	capture = cvCreateCameraCapture(ID_WEBCAM);
    	if (capture == NULL) {
    		printf("> Impossible d'initialiser la capture de la webcam.\n");
    		return EXIT_FAILURE;
    	}
     
    	/* Récupérer la première frame. */
    	if(!cvGrabFrame(capture)) {
    		printf("> Impossible de recuperer la premiere frame.\n");
    		return EXIT_FAILURE;
    	}
     
    	/* Extraire la première frame. */
    	image = cvRetrieveFrame(capture, ID_WEBCAM);
     
    	/* Boucle principale: capturer une frame, l'afficher. */
    	do {
    		image = cvQueryFrame(capture);
     
    		/* Affichage de l'image. */
    		cvShowImage("view", image);
     
    		/* Capturer les entrées clavier, ou attendre 20 ms. */
    		key = cvWaitKey(20);
    	} while (key != 'q');
     
    	/* Libérer la webcam. */
    	cvReleaseCapture(&capture);
     
    	/* Détruire les fenêtres. */
    	cvDestroyAllWindows();
     
     
    	return EXIT_SUCCESS;
    }
    Cela permet de récupérer les images de ta webcam dans une structure définie par OpenCV. Après tu peux faire tout les traitements que tu souhaites, y comprit de générer une vidéo à partir de ces images.

    J'espère que ça pourra te donner une piste de recherche!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut
    merci pour ta réponse. Je viens de tester un bout de ton programme; je suis plutôt optimiste vu que le pointeur cvCapture est non nul, signe qu'il se branche bien sur la caméra. Dans le cas ou j'aurais plus d'un webcam branché je devrais juste leur assigné un index, ou alors il y a d'autres manipulations à faire??? merci

  4. #4
    Membre actif
    Avatar de Aladore
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Par défaut
    C'est bien ça, bon après vérification dans la doc en fait c'est -1 qu'il faut passer si tu n'as qu'une webcam de brancher. Après, c'est indexé oui, donc tu as la webcam 0, 1, ...
    Bon courage pour ton stage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut
    c'est malheureusement le carré noir pour moi, avec le code complet. tu sais à quoi ça peut être du?? j'ai tester les index un à un. à partir d'un index supérieur à 0 il bug. Donc du coup je suppose que la capture est bien branché sur quelque chose, mais quoi? je ne sais pas. peut être que ça viens aussi de la caméra??? je ne sais pas si tu t'y connais un peu en drivers (moi pas); mais en gros j'ai devant moi une lentille posé sur une carte verte. elle fait de l'acquisition d'image j'en suis sur, vu que le petit soft fourini avec lui permet de le faire. En gros ce soft au tout debut à permis de l'enregister en temps que périphérique. peut être que le pb viens de là? tu en pense quoi? et qu'en gros je devrais peut être chercher plus bas niveau que openCV, pour pouvoir recupérer l'image.

  6. #6
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Par défaut
    Je ne connais pas OpenCV, mais au niveau plus fondamental Microsoftien, il y a une très vieille API (AVIcap) qui ne permet pas bien de choisir sa source, car toutes les webcams se "branchent" sur le même driver. Si cette librairie est basée sur cette API, il n'y a pas trop d'espoir si le PC a plus d'une source video (l'index fait référence au pilote, pas au périphérique, et on se retrouve avec un des périphériques choisi au hasard).

    Dans le cadre d'un stage, c'est pourtant l'API que je recommanderais. Vous devriez pouvoir copier/coller directement les tutoriels à partir de ceci. Les exemples sont suffisamment simples pour ne pas s'encombrer avec une librairie supplémentaire.

    Pour contourner les limitations de cette vieille API (1995 quand même!), il y a eu pendant un moment DirectShow, qui permet un contrôle bien plus fin des sources, mais qui est considéré aussi comme obsolète.

    La nouvelle "mode" MS, c'est Media Foundation. C'est pas si compliqué que ça en a l'air, mais c'est typique des nouvelles API MS (je demande à un objet COM la création d'une structure qui me permettra de lancer une requête de structure de demande de formulaire en 7 exemplaires pour demander la permission de détecter s'il existe un pilote chargé de répondre à une requête sur le nombre de périphériques ayant comme paramètre de type MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE une valeur MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID, et si la réponse est supérieure à zéro, alors on peut lancer la vraie psychanalyse avec les CoCreateBlabla et EnumDeviceTrucMuche et autres joyeusetés). Au final, si on est sous Windows 7 on finit heureusement par obtenir un accès à un objet IMFMediaBuffer qui permet pas mal de choses, surtout en combinaison avec des surface D3D9+. Par contre, sur un client Vista, si on veut analyser les images il faut recourir à d'autres composants, comme expliqué ici.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut
    ok je vais essayer de me rabattre sur media foundation et voir ce que je trouve sur le sujet. sinon j'étais parti sur direct show aussi, mais tu m'apprend là qu'il est obselete. Dommage!!!

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/03/2008, 09h17
  2. Réponses: 4
    Dernier message: 17/04/2007, 17h00
  3. Réponses: 2
    Dernier message: 13/04/2007, 15h03
  4. Réponses: 1
    Dernier message: 23/06/2006, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo