Tutorial :OpenCV 2.1: Runtime error



Question:

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<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<sys/time.h>    #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);    }  


Solution: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.


Solution: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<stdio.h>  #include<stdlib.h>  #include<string.h>  #include<sys/time.h>    #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;  }  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »