0

I am executing the code from the sample folder of OpenCV on object Detection. Below is the following code:

<pre><code>#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include "iostream"
#include "stdio.h"

using namespace std;
using namespace cv;


void detectAndDisplay( Mat frame );

String face_cascade_name = "E:/opencv/data/haarcascades/haarcascade_frontalface_alt.xml";
String eyes_cascade_name = "E:/opencv/data/haarcascades/haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;
CascadeClassifier eyes_cascade;
string window_name = "Capture - Face detection";
RNG rng(12345);

int main( int argc, const char** argv )
{
  CvCapture* capture;
  Mat frame;


  if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading1\n"); return -1; };
  if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading2\n"); return -1; };


  capture = cvCaptureFromCAM( -1 );
  if( capture )
  {
    while( true )
    {
      frame = cvQueryFrame( capture );


      if( !frame.empty() )
       { detectAndDisplay( frame ); }
      else
       { printf(" --(!) No captured frame -- Break!"); break; }

      int c = waitKey(10);
      if( (char)c == 'c' ) { break; }

    }
  }
  return 0;
}

void detectAndDisplay( Mat frame )
{
   std::vector<Rect> faces;
   Mat frame_gray;

   cvtColor( frame, frame_gray, CV_BGR2GRAY );
   equalizeHist( frame_gray, frame_gray );

   face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

   for( int i = 0; i < faces.size(); i++ )
    {
      Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
      ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 2, 8, 0 );

      Mat faceROI = frame_gray( faces[i] );
      std::vector<Rect> eyes;


      eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

      for( int j = 0; j < eyes.size(); j++ )
       {
         Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
         int radius = cvRound( (eyes[j].width + eyes[j].height)*0.25 );
         circle( frame, center, radius, Scalar( 255, 0, 0 ), 3, 8, 0 );
       }
    }

   imshow( window_name, frame );
}
</code></pre>

While Debugging the code it throws a following exception

<pre><code>Unhandled exception at 0x5788bf1d in corner.exe: 0xC000001D: Illegal Instruction.</pre></code>

Can anyone help me out with the solution?

Rahul
  • 21
  • 7
  • if you are using VS2008, please let us know at which line the break happens - you can do this by using the debugger and stepping through, or more conveniently, just pressing Break when the unhandled exception dialog pops up. The first way is better as it will also probably show you what happened and you may fix it faster. – im so confused Jan 11 '13 at 18:42
  • while debugging step by step the exception came in `void detectAndDisplay(Mat Frame)` at `face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );` – Rahul Jan 11 '13 at 18:50
  • Unfortunately, I have no experience with this class. I can only suggest that you further step into detectMultiScale() and see where inside the call the illegal instruction occurs. That will then point you to the way in which you are incorrectly using the library methods. Of course there is a chance OpenCV has a bug, but assume it's your improper use of the library at first. – im so confused Jan 11 '13 at 19:17
  • as a side note, do you have to give a size for `frame_gray` first, or is that done for you in `cvtColor`? – im so confused Jan 11 '13 at 19:19
  • no it is done as it convert the frame to gray level based frame by `cvtcolor`. – Rahul Jan 11 '13 at 19:26

1 Answers1

0

try haarcascade_frontalface_alt2.xml .