OpenCV 2.1: Ошибка выполнения

У меня есть программа, которая использует OpenCV. У меня есть веб-камера, и она захватывает цветовые кадры, и я хочу преобразовать цветные кадры в frameworks с серой шкалой. Итак, я использовал cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY); для преобразования цветовых кадров в кадры BW.

После использования этой функции преобразования цвета -> Оттенки серого я получаю ошибку времени выполнения:

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

Кто-нибудь испытал эту проблему раньше? Любые решения, как это исправить?

Спасибо

Моя программа

 #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); } 

Вам не нужно выделять свой IplImage? Функция преобразования не указана, но я считаю, что вам нужно выделить dst того же размера / типа, что и источник.

Я вижу, что многие люди пытаются сделать эту простую задачу и испытывают проблемы с ней.

Поэтому я взял на себя смелость изменить исходный код на программу, которая отображает на экране преобразованное в оттенках серого видео с веб-камеры.

Используйте этот код для справки.

Я собрал на своем Macbook Pro:

 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 

Файл: gray.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; }