#1 Le 13/12/2012, à 10: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, à 15: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 ...