GeckoGeek.fr

Paradigme d'un lézard

Dimanche 20 Juillet 2014

Lire le flux d’une Webcam / Caméra / Vidéo avec OpenCV

Par Vinz le 14/03/2010 dans Programmation | 57 commentaires

OpenCV est une librairie de traitement d’image qui offre un bon éventail de fonctions intégrées et puissantes. Dans ce tutorial nous allons voir comment lire une vidéo, mais aussi comment récupérer le flux vidéo d’une caméra || webcam tout en analysant chaque commande pour bien vous faire comprendre leur utilité. Je vais par ce topic décortiquer chaque commande (dans un ordre logique). Pour le résultat final veuillez vous référer à la fin de la page !

Ouvrir le flux d’une vidéo / caméra

Avant de pouvoir lire un quelconque flux vidéo il faut déjà l’ouvrir. Définissez premièrement la variable qui va stocker ce flux :

CvCapture *capture;

Ouvrir une vidéo

Ouvrir une vidéo est chose relativement aisée. Par contre il se peut que vous ne puissiez pas ouvrir tout type de vidéo. Ceci peut entre autre varier selon la version d’OpenCV mais aussi selon les différentes librairies installées sur votre système d’exploitation.

capture = cvCreateFileCapture("/path/to/your/video/test.avi");

Ouvrir le flux d’une Webcam / Caméra

Avec un flux vidéo récupéré en temps réel les capacités d’OpenCV prennent tout leur sens. Que ce soit une webcam ou une caméra, il est possible de récupérer ce qu’elles voient. De manière générale il est facile de lire le flux d’une webcam. Si vous souhaitez utiliser une caméra analogique (non numérique) il vous faudra probablement utiliser un convertisseur pour pouvoir la brancher en USB sur votre ordinateur. Notez par ailleurs que selon ce convertisseur (Dazzle, Easy Cap etc) vous aurez très probablement besoin du driver approprié selon votre système d’exploitation.

capture = cvCreateCameraCapture( CV_CAP_ANY );
  • Le paramètre dans cvCreateCameraCapture() permet de définir quel flux vidéo récupérer. Généralement le CV_CAP_ANY permet de prendre le premier disponible (donc par exemple une webcam intégrée à votre ordinateur). Il se peut que cela ne marche pas tout le temps, donc si vous rencontrez un problème mettez 0 à la place ! Les valeurs diffèrent ensuite selon le port utilisé (usb, firewire). Pour plus d’information sur les valeurs disponibles, référez-vous au fichier highgui.h
  • Toujours dans la même optique, vous pouvez y indiquer un autre chiffre pour ne pas récupérer le premier flux vidéo (par exemple /dev/video0 sur Linux) mais un autre. Ainsi si vous avez une Webcam intégrée et une caméra branchée en USB, et que vous souhaitez récupérer le flux de cette dernière, indiquez 1 à la méthode.

Vérifier que le flux est bien ouvert

Il est possible qu’ouvrir le flux vidéo ne se passe pas comme prévu. Pour pallier à ce problème, il est fortement conseillé de réaliser une petite vérification sur la variable “capture”.

if (!capture) {

   printf("Ouverture du flux vidéo impossible !\n");
   return 1;

}

Pour améliorer la vérification vous pourriez même retenter l’ouverture du flux X fois jusqu’à décider d’arrêter (pour éviter une boucle infinie). En effet dans certains cas, la webcam/caméra n’est pas détectée immédiatement. Si l’on ne laisse pas un petit intervalle de temps à l’ouverture, alors il faudrait lancer le programme plusieurs fois de suite jusqu’à ce qu’il ne fasse plus l’erreur.

Récupérer une image et l’afficher

Le principe du traitement vidéo est de procéder à une analyse du flux image par image. A chaque traitement d’image terminé vous affichez l’image résultante dans une fenêtre.

Créer une fenêtre

Ce qui est bien avec OpenCV c’est que la création d’une fenêtre ne change pas en fonction du système d’exploitation. Par ailleurs vous pouvez créer plusieurs fenêtres pour afficher dedans plusieurs résultats (images ou vidéos). Une fenêtre est définie par un nom :

cvNamedWindow("GeckoGeek Window", CV_WINDOW_AUTOSIZE);

Le flag “CV_WINDOW_AUTOSIZE” (qui est en fait un nombre : 0 ou 1) permet d’indiquer si la fenêtre doit s’adapter automatiquement ou non.

Récupérer une image

Une image est stockée dans une classe spécifique à OpenCV : IplImage. Donc quelque part dans votre code avant de commencer vous devez la définir :

IplImage *image;

Il existe deux façons de récupérer une image du flux vidéo. La première (et la plus utilisée) est la suivante :

image  = cvQueryFrame(capture);

Il faut indiquer en paramètre le flux vidéo à utiliser pour récupérer l’image. Cela devient vital dans le cas où vous utilisez plusieurs sources de vidéo !
L’autre possibilité pour lire l’image est d’utiliser deux méthodes séparées. La première permet de demander à OpenCV de récupérer une image du flux vidéo et de la stocker en mémoire. La méthode retourne 0 ou 1 en fonction du résultat.

cvGrabFrame(capture);

Ensuite il suffit de récupérer l’image dans la variable appropriée :

image = cvRetrieveFrame(capture);

Notez toutefois que c’est cette dernière méthode qui prend le plus de temps (5 à 10 fois plus que cvGrabFrame).

Afficher une image

Une fois l’image stockée dans une variable il suffit de l’afficher dans une fenêtre préalablement créée.

cvShowImage("GeckoGeek Window", image);

Notez qu’en général, avant d’afficher l’image, on effectue des traitements sur cette dernière : zoom, contraste, reconnaissances variées (faciale par exemple), etc. Prenez en compte que la communauté d’OpenCV offre de nombreux codes en exemple qu’il est conseillé de parcourir pour vous faire une idée des possibilités.

Boucler et temporiser

Pour récupérer les images petit à petit il vous faudra créer une boucle et faire une petite pause entre chaque image.

Faire une pause

Faire une pause dans OpenCV permet en même temps de récupérer une interaction clavier. Cela permet ainsi d’analyser la touche qui a subie une interaction et de procéder à certaines actions en conséquence. Notez que ce système peut malheureusement entrer en conflit selon votre programme. Par exemple si vous utilisez en plus une librairie graphique (comme QT) avec des champs texte, il vous faudra trouver une solution pour partager ces événements clavier.

key = cvWaitKey(10);

La commande cvWaitKey() attente X ms et renvoie l’interaction clavier (s’il y en a eu une).
Le temps d’attente varie en fonction de framerate que vous souhaitez imposer. Par contre vous ne pourrez pas aller au-delà de ce que propose votre caméra. Notez par ailleurs que mettre un temps d’attente trop court peut causer un freeze sur certaines versions de Linux. Mettez donc en général au moins 5 ms.

Faire une boucle !

Et enfin il vous faut assembler tous les aspects dont on a parlé ci-dessus pour lire et afficher la vidéo ! Ici nous nous basons sur l’interaction clavier pour arrêter la boucle while. Il existe d’autres moyens d’arrêter la boucle (comme se baser sur le retour de cvGrabFrame).

// Boucle tant que l'utilisateur n'appuie pas sur la touche q (ou Q)
while(key != 'q' && key != 'Q') {

   // On récupère une image
   image = cvQueryFrame(capture);

   // On affiche l'image dans une fenêtre
   cvShowImage("GeckoGeek Window", image);

   // On attend 10ms
   key = cvWaitKey(10);

}

Libérer la mémoire utilisée !

Etape très (très) importante, libérer toute la mémoire que vous avez utilisé en créant ces divers objets.

Libérer la fenêtre

Une seule fonction suffit à fermer toutes les fenêtres :

cvDestroyAllWindows();

Toutefois dans le cas où vous ne souhaiteriez que fermer une seule et unique fenêtre, vous pouvez utilisez cette dernière :

cvDestroyWindow("GeckoGeek Window");

Libérer la variable d’image !

Lorsque vous récupérez une image d’un flux vidéo vous n’avez pas besoin de la “libérer” dans la boucle while, ni même après. OpenCV gère ceci automatiquement et vous n’avez qu’à votre charge de désallouer une image créée par vos soins. Si vous veniez à le faire, pensez donc à faire ceci :

cvReleaseImage(&uneAutreImage);

Libérer la capture vidéo !

Et enfin, il vous faut libérer la capture vidéo (entre autre pour que la webcam/caméra ne soit plus utilisée par le programme).

cvReleaseCapture(&capture);

Tout en un

Voici l’ensemble du programme que je viens de décortiquer pour vous.

/*
 * Code written by Vinz (GeckoGeek.fr)
 */

#include <stdio.h>
#include "highgui.h"
#include "cv.h"

int main() {

	// Touche clavier
	char key;
	// Image
	 IplImage *image;
	// Capture vidéo
	CvCapture *capture;

	// Ouvrir le flux vidéo
	//capture = cvCreateFileCapture("/path/to/your/video/test.avi"); // chemin pour un fichier
	capture = cvCreateCameraCapture(CV_CAP_ANY);

	// Vérifier si l'ouverture du flux est ok
	if (!capture) {

	   printf("Ouverture du flux vidéo impossible !\n");
	   return 1;

	}

	// Définition de la fenêtre
	cvNamedWindow("GeckoGeek Window", CV_WINDOW_AUTOSIZE);

	// Boucle tant que l'utilisateur n'appuie pas sur la touche q (ou Q)
	while(key != 'q' && key != 'Q') {

	   // On récupère une image
	   image = cvQueryFrame(capture);

	   // On affiche l'image dans une fenêtre
	   cvShowImage( "GeckoGeek Window", image);

	   // On attend 10ms
	   key = cvWaitKey(10);

	}

	cvReleaseCapture(&capture);
	cvDestroyWindow("GeckoGeek Window");

	return 0;

}

Si vous avez une question ou si ce billet vous a été utile, n’hésitez pas à laisser un commentaire pour nous le faire savoir ! Bientôt des tutoriaux un peu plus compliqués :-]

Commentaires (57)
  1. Romain le 20 Apr 2010 à 10:34

    Bonjour,
    ce serait pas plutôt cvQueryFrame que cvQueryImage dans le paragraphe récupérer une image ?
    Merci pour ce mémo en tous cas, clair et succint

    Romain

  2. Vinz le 20 Apr 2010 à 12:38

    Hello,
    Oui effectivement ^^, j’avais corrigé l’erreur dans le code final mais pas au début du tuto ! Merci !
    Bonne semaine
    Vincent

  3. Anthony le 23 Apr 2010 à 09:11

    Tout d’abord je vous félicite pour ce tuto vraiment clair et complet !
    Cependant j’aurais aimé savoir également comment récupérer le flux d’une caméra ni USB ni Firewire, mais IP. Tout du moins si cela est possible.
    Bonne continuation.

    Anthony

  4. Vinz le 23 Apr 2010 à 11:05

    Hello,

    J’aurais tendance à dire que tout est possible en informatique mais bon après… :-p
    Ce qu’il faut bien comprendre c’est qu’OpenCV via la fonction cvCreateCameraCapture va ouvrir un device monté dans /dev/ (dev = device) (et le plus souvent branché en USB).
    Pour une caméra IP le problème vient du fait qu’il faudrait qu’elle soit “branchée” et non qu’on y accède en réseau. Donc de souvenirs y’a pas de solution miracle pré-intégrée à OpenCV. Y’a quelques discussions à ce sujet dont sur http://opencv-users.1802565.n2.nabble.com/OpenCV-and-Network-Camera-td2395314.html ou http://stackoverflow.com/questions/712998/opencv-with-network-cameras. Les solutions divergent un peu, mais un mec dit utiliser ceci : cvCreateFileCapture(“rtsp://camera-address”);
    On a pas eu l’occasion de tester, donc si tu y parvient hésite pas à nous le dire ;-)

    A+
    Vinz

  5. mohinder le 9 Dec 2010 à 11:16

    Bonjour,
    J’arrive pas à comprendre pourquoi cvQueryFrame me renvoie tout le temps des images noires … aviez-vous déjà rencontré ce genre de problème ?
    merci :)

  6. Vinz le 9 Dec 2010 à 15:36

    Hello,
    D’instinct je dirai que ta webcam n’est pas reconnue OU que le paramètre indiqué à cvCreateCameraCapture() n’est pas le bon ^^
    Difficile de t’aider à débuguer sans avoir à coté ton matériel ^^
    Bon courage

  7. kikiz59820 le 15 Feb 2011 à 16:57

    Bonjour. Dans le cadre d’un projet, je dois récupérer un flux vidéo sortant d’une webcam. J’ai donc utilisé votre code concernant la lecture d’un flux. Cependant les images qui ressortent ne contiennent que des zéros, j’ai pourtant repris éxactement le code sans oublier le “key = cvWaitKey(10);”. Aucune erreur de compilation n’apparait et la webcam est bien détecté donc je n’arrive pas à résoudre ce problème. J’aimerais donc savoir si vous pourriez me venir en aide.
    Merci

  8. Lya le 16 Feb 2011 à 21:34

    “Les images ne contiennent que des 0″ c’est-à-dire que le flux que l’on capte est noir et qu’il n’y a pas d’image ? Ou bien on voit les images, mais seulement, quand on regarde la valeur des pixels ça ne retourne que des 0 ? Si l’image est noire mais que la webcam est bien détectée (et que la capture se fait donc) ça peut provenir de la webcam elle-même. Il faudrait essayer avec une autre webcam pour vérifier. Dans le cas où se sont les valeurs uniquement, c’est que la manière de lire la valeur d’un pixel n’est pas bonne (format ou autre).

  9. Shin le 19 Apr 2011 à 21:53

    Hello,

    Alors j’ai eu ce fameux problème d’ecran noir.
    C’est a dire que la fenetre qui devait afficher l’image video restait tout simplement noire. Après pas mal de recherches je suis tombé sur ce fil de discussion sur des bugs opencv : https://code.ros.org/trac/opencv/ticket/735
    Et j’ai fini par comprendre que c’est simplement la version 2.2 release d’opencv qui est bugguée, et qu’elle a été patchée sur la dernière version présente sur leur svn, mais malheureusement pas dans la release.
    Néanmoins un patch est mis a dispo dans les commentaires (le second patch r4440), et l’appliquer à l’endroit indiqué réssoud le problème (sous windows 64bits en tout cas).

    Il faut, trouver le fichier precomp.hpp situé dans le package opencv que vous avez dl : “opencv2.2/modules/highgui/src/precomp.hpp”
    Modifier ces lignes :
    #if !defined WIN32 && !defined _WIN32
    #include “cvconfig.h”
    #else
    void FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin );
    #endif

    Par ces lignes :
    #include “cvconfig.h”
    #if defined WIN32 || defined _WIN32
    void FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin );
    #endif

    Puis recompiler via cmake dans un nouveau build.
    Re-faire vos liaisons linker etc, sans oublier de changer les chemins enregistrés dans le Path (la variable d’environnement).
    Tout relancer, et ça devrai fonctionner.

    Si vous ne voulez pas vous faire chier par contre, je vous invite à revenir sur la version 2.1 d’opencv qui marche parfaitement…

  10. Vinz le 19 Apr 2011 à 22:20

    Ha les nouvelles versions d’OpenCV, ca bug toujours de partout ^^ Merci pour l’astuce.

  11. aurélie le 2 May 2011 à 10:28

    Salut!!
    j’utilise opencv2.1 et quand je compile le programme j’ai une image verte et la webcam ne s’allume pas …. ma webcam ne convient pas pour ce type d’expérience ??

    merci

  12. Vinz le 2 May 2011 à 20:09

    Hello ! tu es sous quel système d’exploitation ? avec quelle webcam ? Si aucune caméra n’était disponible cela l’aurait dit. Si cela affiche du vert cela peut venir des drivers qu’utilise OpenCV et de la webcam qui ne sont pas compatibles.

  13. aurélie le 3 May 2011 à 13:14

    je suis sous Windows 7 64 bits
    ma webcam c’est une Philips
    Il faut que je télécharge des drivers pour ma webcam ??

  14. Vinz le 3 May 2011 à 22:01

    J’avouerai que pour Windows 7 je ne saurais trop dire vu que je travaille surtout avec Mac OS X et Linux :-/ Je pense effectivement que les drivers utilisés par OpenCV n’arrivent pas à trouver ta webcam. Tu peux toujours essayer de mettre 0, puis 1, 2 etc (sur quelques chiffres) sur la fonction cvCreateCameraCapture() (sous Linux en fait le numéro correspond à l’entrée vidéo disponible, 0 étant la première). Les 64 bits n’aident pas forcément xD moi je te conseillerai d’avoir un boot quelque part sous Linux, tu aurais surement moins de problème. Autre possibilité, ta webcam qui n’est pas supportée (mais je ne suis pas expert sur les webcams ^^).

  15. nog le 5 Jun 2011 à 16:17

    Je viens d’installer opencv, j’arrive à faire stream simple grâce à ce code. Mais en faisant quelque test, je me suis aperçu que lorsqu’on reste appuyé sur une touche du clavier l’image ce fige, puis reprend quand on relâche la touche. Comment pourrait on remédier a ce problème ?

  16. kadi le 15 Jun 2011 à 03:12

    salut !

    j’ai essayé d’ouvrir une video mais j’en arrive pas voilà comment j’ai fait

    int main(int argc, char** argv) {

    //….
    // Ouvrir le flux vidéo
    //capture = cvCreateFileCapture(“E:/mesrpojets/C++/video.avi”); //ça n’a ps marché!
    // j’ai meme utilisé // \ \\
    capture = cvCreateFileCapture(argv[1]); // alrs j’ai tenté ça , mais sans succés !

    merci

  17. Thony le 15 Jun 2011 à 08:36

    Salut,
    Super tutoriel, j’utilise ce code et j’aimerais savoir comment peut on gérer la fin de la vidéo car si je quitte pas avant celle ci, le programme crash…

    Des personnes utilisent elles les images traitées pour les envoyer dans des pictureControl sous Mfc ?

    Merci d’avance.

  18. Vinz le 15 Jun 2011 à 13:52

    @nog : comme on ne fait pas de sleep dans la boucle, si le contenu de la boucle va vite, effectivement il y a un risque de freeze. Donc tu peux éventuellement rajouter un sleep à la fin ;-) cela va ralentir un peu, mais tu évitera le freeze ! enfin plutôt usleep pour ralentir en ms et non secondes.

  19. Vinz le 15 Jun 2011 à 13:54

    @kadi : bizarre. Il ne la trouve pas ? j’avoue qu’en “chemin” windows je ne suis pas expert. Tu as tenté de faire en chemin relatif pour voir ?

  20. Vinz le 15 Jun 2011 à 13:57

    @Thony : salut, je ne vois pas ton soucis ?! en principe avec la lettre q/Q tu peux arrêter la boucle while et donc sortir du programme, non ? à quel moment cela crash ? sinon pour pictureControl, je ne connais pas bien, mais je dirai que cela reste possible ^^

  21. Thony le 15 Jun 2011 à 19:53

    Oui les lettres fonctionnent parfaitement cependant j’aimerais pouvoir gérer la fin de la vidéo en même temps que les lettres q et Q. J’ai essayé avec capture =! NULL mais étant donné que c’est un pointeur au départ de la vidéo il passe donc à 1 et il reste à cette valeur. Je souhaite donc que mon traitement sur la vidéo puisse s’arrêter de la même manière que la touche q lorsque celle ci se termine.

    merci

  22. Vinz le 16 Jun 2011 à 15:59

    Ha oui dans le cas d’un fichier vidéo ou d’une coupure. Je pense qu’il est possible de faire la comparaison sur “image” qui contient l’image récupérée et faire ton test dessus ?! avec un && dans la boucle while (pas de quoi tester sous le bras).

  23. Selma le 18 Jun 2011 à 09:23

    Salut!
    Tout d’abord, un grand merci pour ce tuto vraiment bien fait !
    En fait, j’ai une petite astuce que je veux partager meme si j’ignore si c’est toujours valable :p
    En mettant votre code, le programme plante, autrement dit : l’intérieur de la fenêtre censée afficher le flux, est tout gris, puis le fameux msg “NOM_APP.exe a cessé de fonctionner…” puis il m’invite à déboguer … etc
    mais, dés que je remplace la fonction cvCreateFileCapture(CV_CAP_ANY) par cvCaptureFromCAM(CV_CAP_ANY), tout rentre dans l’ordre, et le flux vidéo est récupéré !
    notons que je travaille avec OpenCV2.1, Qt, sous Win7 64bits
    Merci.

  24. Vinz le 18 Jun 2011 à 13:40

    Hello ! le cvCreateFileCapture est pour un fichier vidéo (.avi par exemple). Pour un flux de webcam il faut mette cvCreateCameraCapture ;-) De souvenirs cvCaptureFromCAM est l’ancienne fonction à éviter (je crois). Bon week-end !

  25. Selma le 18 Jun 2011 à 17:09

    Honte sur moi !!
    Merci encore Vinz

  26. Vinz le 18 Jun 2011 à 22:35

    De rien, bon week-end :-)

  27. Romain le 30 Jun 2011 à 17:16

    Bonjour,
    J’essaye d’insérer ce code dans le main d’une Windows form application sous Visual Studio 2010.
    J’obtiens les erreurs suivantes lors de la compilation :
    C3862: cvRound : cannot compile an unmanaged function with /clr:pure or /clr:safe
    C3645: cvRound : _clrcall cannot be used on functions compiled to native code
    Et même chose pour CV_XADD à la place de cvRound.

    Question subsidiaire : comment faire en sorte que le stream soit affiché dans la fenêtre, dans une sorte de picture box par exemple, et en déclanchant l’affichage du flux avec un bouton ?

    Merci d’avance pour votre aide !

  28. kev le 8 Jul 2011 à 10:36

    J’ai suivi tout ce que tu as décris précédemment, la compilation se passe bien mais lors de l’exécution j’obtiens une segmentation fault. As-tu déjà eu un tel problème ?

    J’utilise une vidéo .avi qui je passe en paramètre et qui se situe dans le répertoire où je travaille donc j’utilise la commande suivante:

    capture = cvCreateFileCapture(argc[1]);

    Est-ce correct ? Car même quand je code le nom de la vidéo en dur ça ne marche pas. Je travaille sous Linux pour info.

    Merci pour ton aide.

  29. Vinz le 8 Jul 2011 à 22:01

    @kev : humm as-tu essayé avec une autre vidéo pour voir ? en principe si la vidéo n’est pas supporté, OpenCV devrait le dire. Pour le segfault je ne vois pas trop comme ça… ca peut être à cause de l’OS, du code ou de la vidéo. Mais juste un segfault c’est difficile à dire ^^

  30. alex le 2 Aug 2011 à 11:51

    SAlut alors merci aussi pour ton programme!!! Il est vraiment bien! Et un peu comme les autre j’ai un petit problème…
    En effet il fonctionne très bien avec ma Webcam avec la commande:
    capture = cvCreateCameraCapture(0);
    Mon souci c’est que je veux voir l’image d’une camera (type camera de surveillance infrarouge..) externe reliée par USB mais je n’arrive pas à avoir son image!! Meme en mettant 1 ou d’autres chiffres à la place du o j’ai toujours l’image de la webcam de mon pc qui revient!!!
    Si tu as une petite idée du pourquoi du problème je t’en serrai vraiment reconnaissant!!
    Merci d’avance!

  31. Vinz le 2 Aug 2011 à 23:06

    Hello !
    Moyen que tu désactive la webcam de ton PC ? enfin elle est interne j’imagine ^^mmm
    Première solution, tu lances un programme utilisant la webcam de ton PC, et en principe avec CV_CAP_ANY il trouvera (si y’a les drivers) la caméra dont tu parles.
    Autre solution, si tu es sous Linux || mac, faire un “ls /dev/” qui affiche les devices connectés (enfin entre autre). En principe les caméras/webcam reconnus avec driver etc sont sur /dev/video0 puis /dev/video1 et /dev/video2 etc etc. Donc si tu vois un nouveau /videoX quand tu branches ta caméra, c’est bingo, tu sais quel numéro mettre (le X). Si tu ne vois rien, c’est peut-être que cette caméra n’est pas supportée par ce qu’utilise openCV.
    Sinon fait une recherche google du genre : “NOM_DE_TA_CAMERA opencv” et tu trouveras peut-être des infos :-)
    A+
    Vincent

  32. Prince le 4 Oct 2011 à 12:39

    Bonjour,
    Lorsque je compile le code, j’obtiens cette erreur:

    Compiling… Cpp1.cpp
    C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\Projet\Cpp1.cpp(3) : fatal error C1083: Cannot open include file: ‘highgui.h’: No such file or directory
    Error executing cl.exe.

    Que dois-je faire pour resoudre le probleme et pouvoir demarrer ma webcam?
    Merci

  33. yous le 8 Oct 2011 à 18:13

    je souhaiterai quel doit etre la condition dans le while afin de fermer automatiquement la fenetre video à la fin de la video

  34. revel le 4 Feb 2012 à 11:01

    Bonjour à tous, je suis sous Ubuntu 11.10, j’ai une logitech c310, j’ai essayé de prendre une photo à partir de ce code sous opencv. La capture marche sous Windows et Mac OS, mais pas sous linux.
    J’obtiens l’erreur : “Capture is NULL”
    Je pense que cela viendrait plutôt des pilotes, qu’en pensez vous?? J’ai testé sous cheese et cela marche. Quand on va dans le dossier dev, on a bien video0 qui apparaît lorsque l’on connecte la caméra.
    Vous pensez que ce serait openCV qui serait mal installé??
    merci d’avance

  35. simo le 20 Feb 2012 à 14:32

    bonjour;
    Lorsque je compile j’obtiens aucune erreur mais je n’arrive pas à récupérer le flux la fenêtre est grise. J’ai essayé ma cam ça marché avec d’autre code!. Que pensez vous? Merci

  36. melken le 24 Feb 2012 à 11:12

    bonjour j’utilise opencv 2.2 avec codebloks et mingw quand je compile la led de la cam s’allume mais la fenetre reste noir qui peut m’aider pour ce probleme

  37. Ostorlabi le 23 Mar 2012 à 16:06

    Bonjour;

    Comment on peut récupérer un flux video d’une cam video, j’ai fait ainsi mais ça marche pas:

    ImageViewer viewer = new ImageViewer(); //create an image viewer
    Capture capture = new Capture(“http://195.5.21.185/axis-cgi/mjpg/video.cgi”); //create a camera captue

    Application.Idle += new EventHandler(delegate(object sender, EventArgs e)
    { //run this until application closed (close button click on image viewer)
    viewer.Image = capture.QueryFrame(); //draw the image obtained from camera
    });
    viewer.ShowDialog(); //show the image viewer

    c’est avec EmguCV, pareil pour openCV!!

  38. fares le 1 May 2012 à 21:36

    comment pointer sur la trame n°i?????? merci d’avance

  39. CHERIF.R le 9 Aug 2012 à 11:14

    J’adore ce tuto,mais,hélas!Je peux pas poser des questions directes car je suis trop novice avec OpenCV que je tente d’utiliser avec MOTODEV pour réussir mon petit projet en Réalité Augmentée.Mais la premiere question qui me vient dans l’esprit est:Comment faire la superposition d’une image avec une video??et comment peut-on detecter la position de superposition de l’image dans la video(avec des marqueurs)?
    Merci les amis.

  40. CHERIF.R le 15 Aug 2012 à 11:32

    SVP les amis,c’est urgent de me repondre,est ce que je peux faire une superposition image’video avec OpenCV sous MOTODEV,et si oui,comment le faire?Merci d’avance.

  41. afranck64 le 30 Sep 2012 à 12:17

    Good, i maded with opencv-Python!!!

  42. Red le 2 Nov 2012 à 15:20

    Waw, c’est superbe

  43. ????? le 15 Nov 2012 à 23:33

    Hello , nice tuto gays

  44. Fellype le 7 Jan 2013 à 01:02

    Merci beaucoup!!!!!!!!!!!!!!!!!!!!!!
    C’est le meilleur tuto que j’ai trouvé sur internet!!!!

  45. LMB le 5 Feb 2013 à 15:59

    Bonjour,

    j’ai trouvé le tuto hyper intéressant.
    En fait, j’ai commencé à lire les vidéos mais la vitesse du flux d’image est trop rapide. J’aimerai savoir comment faire pour diminuer le plus des vidéos.

    Merci de votre aide

  46. Yves le 6 Feb 2013 à 16:44

    Bonjour,

    J’ai bien suivi votre tuto mais ça ne marche pas pour moi .
    à chaque sa m’affiche Ouverture du flux vidéo impossible !
    kk1 pourra m’aider svp et je vous remercie d’avance

  47. Djokes le 25 Mar 2013 à 17:12

    Bonjour à tous;
    j’ai essayer ce programme avec ma webcam intégré et une webcam externe par USB, je n’arrive pas toujours à ouvrir le flux vidéo en temps réel, quelqu’un peut-il m’aider ?
    merci d’avance

  48. kawther le 17 Apr 2013 à 00:45

    Bonjour. Dans le cadre d’un projet, je dois récupérer un flux vidéo sortant d’une webcam. J’ai donc utilisé votre code concernant la lecture d’un flux.
    Cepondant une erreur “Impossible de démarrer le programme car il manque opencv_highui243.dll sur votre ordinateur .Essayer de réinstaller le programme pour corriger ce probléme” apparait :’(
    Malgré que opencv_highui243.dll existe dans le fichier opencv\build\x86\vc10\bin
    !!!!!!!!!!!!!!!!

  49. kawther le 17 Apr 2013 à 13:51

    Bonjour,

    j’ai regardé tous les tutoriels sur ce sujet, cependant lorsque je l’exécute il me dit ‘cxcore.dll introuvable’. Je les ai pourtant mis dans ‘path’ mais toujours rien.
    Je bloque et je ne sais plus quoi faire.

    Merci de m’aider.

  50. antho le 3 Jul 2013 à 14:47

    bonjour,
    votre tuto est genial mais je n’arrive pas a le compiler. cela me sort toutes ces erreurs:
    c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(6): warning C4627: ‘#include ‘ : ignoré lors de la recherche d’une utilisation d’un en-tête précompilé
    1> Ajoutez la directive à ‘StdAfx.h’ ou régénérez l’en-tête précompilé
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(7): warning C4627: ‘#include ‘ : ignoré lors de la recherche d’une utilisation d’un en-tête précompilé
    1> Ajoutez la directive à ‘StdAfx.h’ ou régénérez l’en-tête précompilé
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(15): error C2065: ‘IplImage’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(15): error C2065: ‘image’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(17): error C2065: ‘CvCapture’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(17): error C2065: ‘capture’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(21): error C2065: ‘capture’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(21): error C2065: ‘CV_CAP_ANY’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(21): error C3861: ‘cvCreateCameraCapture’ : identificateur introuvable
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(24): error C2065: ‘capture’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(32): error C2065: ‘CV_WINDOW_AUTOSIZE’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(32): error C3861: ‘cvNamedWindow’ : identificateur introuvable
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(38): error C2065: ‘image’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(38): error C2065: ‘capture’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(38): error C3861: ‘cvQueryFrame’ : identificateur introuvable
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(41): error C2065: ‘image’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(41): error C3861: ‘cvShowImage’ : identificateur introuvable
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(44): error C3861: ‘cvWaitKey’ : identificateur introuvable
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(48): error C2065: ‘capture’ : identificateur non déclaré
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(48): error C3861: ‘cvReleaseCapture’ : identificateur introuvable
    1>c:\users\rn3dlab\documents\visual studio 2010\projects\camm\camm\camm.cpp(49): error C3861: ‘cvDestroyWindow’ : identificateur introuvable

    merci de votre reponse

  51. nopasaran le 8 Aug 2013 à 07:29

    @antho… il faut que tu renseignes correctement les références d’include et de linkage… (de mémoire mais cela fait longtemps que je ne développe plus sous windobe …. tu trouveras cela au niveau des propriétés du projet.)…
    Si tu cherches sur les internets tu trouveras un tuto la dessus.

  52. InspiracionV le 16 Sep 2013 à 23:33

    J’ai acheté un boitier d’acquisition Video USB, mis lorsque je le connecte eet que je lance mon programme avec OpenCv j’obtiens un bsod (bluescreen). Y a t il un moyen de remedier a cela ?

  53. abdessamad le 2 Dec 2013 à 22:42

    bonjour
    j’ai n problème qand je lance ton programme il n’y a qu’une fenêtre qui s’ouvre je ne sais pas pourquoi
    j’utilise opencv 2.4.7 sous microsoft visual studio 2013 sous windows

  54. KM le 10 Jan 2014 à 11:15

    Bonjour,

    Sais-tu comment on ouvre le flux d’une webcam (Opencv) dans une fenêtre Qt?
    Merci

  55. reka le 1 Feb 2014 à 10:53

    j’ai un projet concernant un robot guidé qui a le rôle de récupérer une vidéo dans une conférence et il va la diffuser en temps réelle
    svp est ce que je peux utiliser les onctions ci dessus de la récupération de vidéo
    et aidez moi comment il va la diffuser en temps réelle?

  56. refka le 1 Feb 2014 à 11:01

    j’ai un projet concernant un robot guidé qui a le rôle de récupérer une vidéo dans une conférence et il va la diffuser en temps réelle
    svp est ce que je peux utiliser les onctions ci dessus de la récupération de vidéo
    et aidez moi comment il va la diffuser en temps réelle?

  57. Akimiru le 15 Apr 2014 à 16:04

    Salut, déjà bravo pour le tuto.
    Maintenant dis moi ? Ce tuto marche pour les utilisateur de Python ?

    Moi j’utilise les codes suivant

    import cv2.cv as cv
    ma_camera=cv.CaptureFromCAM(0)
    ma_frame = cv.QueryFrame(ma_caméra)
    cv.NamedWindow(“Test_Webcam”)

    Au fur et à mesure que je tape le code j’ai la cam qui s’allume et la fênetre qui s’ouvre mais il n’y a aucune video qui s’affiche.


Laisser un commentaire