Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

compte supprimé

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 ...