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

OpenCV Discussion :

Problème d'écran gris


Sujet :

OpenCV

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut Problème d'écran gris
    Bonjour,

    J'ai trouvé un programme pour afficher la vidéo captée par la webcam logitech Pro 9000. Voici le programme :

    #include <iostream>
    #include <cv.h>
    #include <highgui.h>

    using namespace std;

    int main(int argc, char *argv[])
    {
    IplImage* img = 0;
    int height,width,step,channels;
    uchar *data;

    // creation et deplacement de la fenetre.
    cvNamedWindow("Fenetre_test", CV_WINDOW_AUTOSIZE);
    cvMoveWindow("Fenetre_test", 100, 100);

    // Initialise la capture
    CvCapture* capture = cvCaptureFromCAM(0);


    while(cvWaitKey(20)!=' '){
    img=cvQueryFrame(capture);


    // get the image data
    height = img->height;
    width = img->width;
    step = img->widthStep;
    channels = img->nChannels;
    data = (uchar *)img->imageData;
    cout << "Processing a " << width << "x" << height << " image with " << channels << " channels" << endl;

    // show the image
    cvShowImage("Fenetre_test", img );

    }

    // release the image
    cvReleaseImage(&img );
    cvReleaseCapture(&capture);
    return 0;
    }

    Mais quand je l'exécute, il affiche juste une fenêtre grise, pas de vidéo. J'ai consulté quelques forums, mais je n'ai pas réussi à le résoudre. J'utilise Visual Studio 2008 et mon pc est Windosw 7. Et j'ai une 2eme webcam incluse sur mon PC. Je ne sais pas si ça crée ce problème.

    Quelqu'un peut m'aider s'il vous plait.

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Points : 102
    Points
    102
    Par défaut
    Bonjour,

    J'ai fait un copier/coller de ton prog. Sous XP, il fonctionne parfaitement.
    Avec plusieurs webcam branchées en même temps (une logitech, une minoru 3D)
    il fonctionne aussi. On accède aux caméras avec cvCaptureFromCAM(0 ou 1 ou 2).
    Voilà, c'est pas la solution à ton problème mais ça peut orienter.

    Cordialement
    "Ce n'est pas parce que les choses sont difficiles qu'elles nous font peur, c'est parce qu'elles nous font peur qu'elle sont difficiles"

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    Bonjour

    Le paramètre passait à cvCaptureFromCAM correspond au numéro de ta webcam qui lui est attribué par l'OS sur lequel tu travail, il se trouve que sous window ca ne fonctionne pas super des fois essaye avec 1 ou 2 ou cherche pour voir si tu trouve pas le numéro quelques part

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci, J'ai trouvé le problème. Je pense que c'était un problème de version de OpenCV. J'ai réussi avec opencv 2.1

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut problème de Laplace ???
    J'ai une autre question qui n'a rien à voir avec l'écran gris. Peux tu me répondre peut-être ?

    J'ai ce programme pour détecter le contour d'un dessin noir et blanc sur une feuille à partir d'une webcam. Quand je le compile, il n'y a pas de problème. Mais si je l'exécute, ça donne ça :
    "Unhandled exception at 0x7564b727 in TestOpenCV21.exe: Microsoft C++ exception: cv::Exception at memory location 0x001df8cc.."

    Peut-être à cause du format de img2 ?

    Voci le programme :

    #include <iostream>
    #include <cv.h>
    #include <highgui.h>

    using namespace std;


    int main(int argc, char *argv[])
    {
    IplImage* img = 0;
    IplImage* img2 = 0;

    int height,width,step,channels;
    uchar *data;

    // creation et deplacement de la fenetre.
    cvNamedWindow("Fenetre_test", CV_WINDOW_AUTOSIZE);
    cvMoveWindow("Fenetre_test", 100, 100);

    // Initialise la capture
    CvCapture* capture = cvCaptureFromCAM(0);

    while(cvWaitKey(20)!=' ')
    {
    img=cvQueryFrame(capture);

    height = img->height;
    width = img->width;
    step = img->widthStep;
    channels = img->nChannels;
    data = (uchar *)img->imageData;

    img2=cvCreateImage(cvGetSize(img),IPL_DEPTH_16S , 1 ) ;

    cvLaplace(img, img2);

    cvShowImage("Fenetre_test", img2 );

    // show the image
    //cvShowImage("Fenetre_test", img );

    }
    cvReleaseCapture(&capture);
    cvDestroyWindow( "Fenetre_test" );

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    ca peut en effet venir d'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img2=cvCreateImage(cvGetSize(img),IPL_DEPTH_16S , 1 ) ;
    ceci peut peut être t'aider :
    http://www.developpez.net/forums/d33...ion-cvlaplace/

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 67
    Points : 102
    Points
    102
    Par défaut
    bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img2=cvCreateImage(cvGetSize(img),IPL_DEPTH_32F , 3 ) ;
    à l'air de marcher.

    cordialement
    "Ce n'est pas parce que les choses sont difficiles qu'elles nous font peur, c'est parce qu'elles nous font peur qu'elle sont difficiles"

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Merci à vous. J'ai changé de méthode. J'ai utilisé cvCanny et j'ai réussi à détecter les contours d'un carré.

    Pouvez vous me dire quelle est la méthode la plus simple pour récupérer les coordonnées des contours et 4 coins de ce carré ?

    Merci !

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    cvfindcontour je dirais

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Pouvez vous me dire si c'est juste ce que j'ai fait pour récupérer la largeur et la hauteur du carré (contour pixel blanc).

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(x = 0; x < image->width; x++) 
    	{
    		for(y = 0; y < image->height; y++) 
    		{
    			if(((uchar *)(image->imageData + y*image->widthStep))[x] == 255) 
    			{
    				sommeX += x;
    				sommeY += y;
    			}
    		}
    	}
    	cout << "x = " << sommeX <<"   " << "y = " << sommeY <<endl;

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par snowpy Voir le message
    cvfindcontour je dirais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CvMemStorage* memoire = 0;
    CvSeq* contour;
     
    cvFindContours( image, memoire, &contour, sizeof(CvContour),
                    CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
    Ensuite, comment on peut récupérer x,y ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 72
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par codon21 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CvMemStorage* memoire = 0;
    CvSeq* contour;
     
    cvFindContours( image, memoire, &contour, sizeof(CvContour),
                    CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
    Ensuite, comment on peut récupérer x,y ?
    Bonjour
    T'as un exemple déja fait pour détecter les rectangle, regarde Squares.c dans les exemple opencv,

  13. #13
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    les contours sont dans la séquence

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par ehkhalid Voir le message
    Bonjour
    T'as un exemple déja fait pour détecter les rectangle, regarde Squares.c dans les exemple opencv,
    J'ai déjà réussi à détecter les contours du rectangle. Maintenant je cherche à trouver la hauteur et la largeur de ces contours. Le square.c est assez compliqué pour moi. J'ai du mal à comprendre comment on peut trouver la largeur et la hauteur.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 54
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par snowpy Voir le message
    cvfindcontour je dirais
    J'ai essayé de trouver la largeur et la hauteur du contour avec cvFincontour comme tu as dit. Mais je n'ai pas réussi. Peux tu préciser un peu plus s'il te plait. Merci

  16. #16
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    439
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 439
    Points : 533
    Points
    533
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, int headersize = sizeof(CvContour), int mode = CV_RETR_LIST, int method = CV_CHAIN_APPROX_SIMPLE, CvPoint offset = cvPoint(0,0) ).
    ta le pointeur sur le premier contour après tu fais des sauts de mémoire, de contour en contour

    un exemple ici :

    http://dasl.mem.drexel.edu/~noahKuntz/openCVTut7.html

    c'est une sorte de liste chainée

Discussions similaires

  1. problème d'écran : décalage
    Par k1000 dans le forum Matériel
    Réponses: 5
    Dernier message: 15/04/2008, 11h56
  2. Problème d'écran noir openGL
    Par Elwood dans le forum OpenGL
    Réponses: 17
    Dernier message: 12/12/2007, 22h22
  3. Problème d'écran après avoir installé linux
    Par zui dans le forum Matériel
    Réponses: 4
    Dernier message: 17/11/2006, 15h03
  4. Problème inquiétant écran
    Par Strab dans le forum Windows XP
    Réponses: 6
    Dernier message: 04/10/2006, 20h21
  5. encore un problème d'écrans
    Par tribaleur dans le forum Périphériques
    Réponses: 2
    Dernier message: 19/06/2006, 11h09

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