OpenCV 2.1: erreur d’exécution

J’ai un programme qui utilise OpenCV. J’ai une webcam qui capture les frameworks de couleur et je veux convertir les frameworks de couleur en frameworks à niveaux de gris. Donc, j’ai utilisé le cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY); convertir les frameworks de couleur en frameworks BW.

Lors de l’utilisation de cette fonction de conversion couleur-> Niveaux de gris, une erreur d’exécution se présente comme

 OpenCV Error: Null pointer (NULL array pointer is passed) in unknown function, file ..\..\..\..\ocv\opencv\src\cxcore\cxarray.cpp, line 2376 

Quelqu’un a déjà rencontré ce problème? Des solutions comment résoudre ce problème?

Merci

Mon programme

 #include #include #include #include #include"cv.h" #include"highgui.h" #include"cxtypes.h" #define ERROR -1 #define NO_ERROR 1 int main() { int EXIT_STATUS = NO_ERROR; int camera_index = 0; CvCapture *capture = 0; IplImage *color_frame = NULL; IplImage *gray_frame = NULL; int exit_key_press = 0; capture = cvCaptureFromCAM(camera_index); cvNamedWindow("SURF", CV_WINDOW_AUTOSIZE); while(exit_key_press != 's') { /* Capture a frame */ color_frame = cvQueryFrame(capture); if(color_frame == NULL) { break; } else { // When this line is enabled the runtime error occurs. //cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY); cvShowImage("SURF", color_frame ); } exit_key_press = cvWaitKey(1); } cvDestroyWindow("Output"); cvReleaseCapture(&capture); printf("\n\n~*~The END~*~"); exit(EXIT_STATUS); } 

Ne devez-vous pas affecter votre IplImage? Ce n’est pas spécifié par la fonction de conversion mais je pense que vous devez allouer un dst de la même taille / type que la source.

Je vois beaucoup de gens qui essaient de faire cette tâche simple et qui ont des problèmes.

J’ai donc pris la liberté de changer votre code source en un programme permettant d’afficher à l’écran la vidéo convertie en niveaux de gris de la webcam.

Veuillez utiliser ce code pour référence.

J’ai compilé sur mon Macbook Pro avec:

 g++ -I/usr/include/opencv -c gray.cpp -o gray.o -m32 -arch i386 g++ gray.o -o gray -L/usr/lib -lcxcore -lcv -lhighgui -lcvaux -lml -ldl -m32 -arch i386 

Fichier: grey.cpp

 #include #include #include #include #include"cv.h" #include"highgui.h" #include"cxtypes.h" #define ERROR -1 #define NO_ERROR 1 int main() { int camera_index = 0; IplImage *color_frame = NULL; int exit_key_press = 0; CvCapture *capture = NULL; capture = cvCaptureFromCAM(camera_index); if (!capture) { printf("!!! ERROR: cvCaptureFromCAM\n"); return -1; } cvNamedWindow("Grayscale video", CV_WINDOW_AUTOSIZE); while (exit_key_press != 'q') { /* Capture a frame */ color_frame = cvQueryFrame(capture); if (color_frame == NULL) { printf("!!! ERROR: cvQueryFrame\n"); break; } else { IplImage* gray_frame = cvCreateImage(cvSize(color_frame->width, color_frame->height), color_frame->depth, 1); if (gray_frame == NULL) { printf("!!! ERROR: cvCreateImage\n"); continue; } cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY); cvShowImage("Grayscale video", gray_frame); cvReleaseImage(&gray_frame); } exit_key_press = cvWaitKey(1); } cvDestroyWindow("Grayscale video"); cvReleaseCapture(&capture); return 0; }