Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

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

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

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

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 ↑