OpenCV 2.1: Runtime error

匿名 (未验证) 提交于 2019-12-03 03:06:01

问题:

I have a program which uses OpenCV. I have a webcam and it captures color frames and I want to convert the color frames to gray-scale frames. So, I used the cvCvtColor(color_frame, gray_frame, CV_BGR2GRAY); to convert the color frames to BW frames.

Upon using this color->Grayscale conversion function, I get a runtime error as:

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

Anyone experienced this problem before? Any solutions how to fix this?

Thanks

My Program

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

回答1:

Don't you have to allocate your IplImage? It is not specified by the conversion function but I believe you have to allocate a dst the same size/type as the source.



回答2:

I see a lot of people trying to do this simple task and having trouble with it.

So I took the liberty of changing your source code into a program that would display on the screen the grayscale converted video from the webcam.

Please use this code for reference.

I compiled on my Macbook Pro with:

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 

File: 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; } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!