Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

#1 Le 13/12/2012, à 11:12

lu-k41

Problème OpenCV : VIDIOC_QUERYMENU: Invalid argument

Bonjour, j'essaye de faire fonctionner un programme servant à capturer une image depuis ma webcam et d'obtenir le code HSV du pixel sur lequel je clique (avec une fenêtre qui définit le seuil). Le code est le suivant :

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
using namespace std;


#define seuil(nb, cherche, tol) (nb > (cherche-tol) && nb < (cherche+tol))

IplImage *normal;
IplImage *hsv;
IplImage *masque;

int h=0, s=0, v=0, tol=10;

void actualiser()
{
    CvScalar scal;
    for(int x=0; x < hsv->width; x++)
    {
        for(int y=0; y < hsv->height; y++)
        {
                              scal = cvGet2D(hsv, y, x);
                              if(seuil(scal.val[0], h, tol) && seuil(scal.val[1], s, tol))
                              {
            scal.val[0] = 0;
                                                }
                             else
                             {
            scal.val[0] = 255;
                              }
                            cvSet2D(masque, y, x, scal);
                           
        }
    }
    cvShowImage("masque", masque);
}

void souris(int event, int x, int y, int flags, void *param=NULL)
{
    if(event == CV_EVENT_LBUTTONUP)
    {
        CvScalar scal;
        scal = cvGet2D(hsv, y, x);

         h = scal.val[0];
         s = scal.val[1];
         v = scal.val[2];
         printf("HSV-HSV h=%f s=%f v=%f",scal.val[0],scal.val[1],scal.val[2] );
         actualiser();
        
           }
}
void changementTol(int val)
{
           tol = val;
           actualiser();
          
}
int main(int argc, char **argv)
{
          CvCapture* capture = cvCaptureFromCAM( 0 );
          normal = cvQueryFrame( capture );
          if(normal == NULL)
          {
        std::cout << "Le chargement de l'image a echoue !" << std::endl;
           return 20;
           }
           hsv = cvCloneImage(normal); // On copie l'image
           cvCvtColor(normal, hsv, CV_BGR2HSV); // BGR -> HSV
           masque = cvCreateImage(cvSize(normal->width, normal->height), normal->depth, 1);
           cvSet(masque, cvScalar(255));
           
           cvNamedWindow("normal", CV_WINDOW_AUTOSIZE);
           cvNamedWindow("hsv", CV_WINDOW_AUTOSIZE);
           cvNamedWindow("masque", CV_WINDOW_AUTOSIZE);
           cvShowImage("normal", normal);
           cvShowImage("hsv", hsv);
           cvShowImage("masque", masque);
   
           cvSetMouseCallback("normal", souris);
           cvCreateTrackbar("Tolérance", "masque", &tol, 255, changementTol);
           cvWaitKey(0);
   
           return EXIT_SUCCESS;
}



Lorsque je le génère, la fenetre masque servant à définir le seuil de tolérance s'affiche, la fenetre avec le filtre hsv également, la fenetre "normal" avec l'image obtenue par la webcam aussi, mais dans la fenetre de console où le programme est censé me donner le code hsv du pixel sur lequel je clique, il n'y a écrit que "VIDIOC_QUERYMENU: Invalid argument". Savez-vous comment corriger ça ?

Je précise que ce problème ne se pose pas sur visual studio sur Windows et que je suis sur Code::Blocks.

D'avance merci !

Hors ligne

#2 Le 23/12/2012, à 16:42

sogyam

Re : Problème OpenCV : VIDIOC_QUERYMENU: Invalid argument

ton prog compile et fonctionne en C++ (et après adaptation en C aussi ).J'ai utilisé la version 2.3 sous sid.Peut être un problème de packaging ou de version ...

Hors ligne

Haut de page ↑