OpenCV Face Detection example code : 0xC0000005: Access violation reading location 0xFFFFFFFF3F46895C [closed]
Edit: Same question pasted here: http://stackoverflow.com/questions/29...
Edit Response :Yes the same question is in there. I am sorry if thats offensive but right now I am on deadline and need answers fast. Won't do this in future.
So, I extracted OpenCV 3.0.0 in C:/ and after 3 days of troubleshooting here and there, I was able to run the example code for face detector (just the face not the eyes) given at the OpenCV tutorials.
Details you may be interested to know:
OpenCV version: 3.0.0 Beta(official site)
OS: Windows 7 x64
Project Configuration: x64
IDE used: MS Visual Studio 2013
C++ Compiler: MS VC++
Programming Language: C++
[In properties]
Included headers:
C:\opencv\build\include\
C:\opencv\build\include\opencv\
C:\opencv\build\include\opencv2\
Linker->General->Additional Library Directories:
C:\opencv\build\x64\vc12\lib\
C:\opencv\build\x64\vc12\bin\
Libraries used:(These libraries contain the combined of all object binaries)
opencv_world300d.lib
opencv_ts300d.lib
Note: The libraries used are prebuilt binaries with OpenCV.
Debugging options:
Environment Path: PATH=C:\opencv\build\x64\vc12\bin\
Here is the code:
#include "opencv2/objdetect.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace std;
using namespace cv;
/** Function Headers */
void detectAndDisplay(Mat frame);
/** Global variables */
String face_cascade_name = "haarcascade_frontalface_alt.xml";
String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;
CascadeClassifier eyes_cascade;
String window_name = "Capture - Face detection";
/** @function main */
int main(void)
{
VideoCapture capture;
Mat frame;
//-- 1. Load the cascades
if (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading face cascade\n"); return -1; };
if (!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading eyes cascade\n"); return -1; };
//-- 2. Read the video stream
capture.open(0);
if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }
while (capture.read(frame))
{
if (frame.empty())
{
printf(" --(!) No captured frame -- Break!");
break;
}
//-- 3. Apply the classifier to the frame
detectAndDisplay(frame);
int c = waitKey(10);
if ((char)c == 27) { break; } // escape
}
return 0;
}
/** @function detectAndDisplay */
void detectAndDisplay(Mat frame)
{
std::vector<Rect> faces;
Mat frame_gray;
//Conversion of frame to grayscale
cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
//Contrast enhance(Spread out intensity distribution)
equalizeHist(frame_gray, frame_gray);
//-- Detect faces
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
cout << faces.size();
for (size_t i = 0; i < faces.size(); i++)
{
Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);
ellipse(frame, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);
Mat faceROI = frame_gray(faces[i]);
std::vector<Rect> eyes;
//-- In each face, detect eyes
//eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
/*
for (size_t j = 0; j < eyes.size(); j++)
{
Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
circle(frame, eye_center, radius, Scalar(255, 0 ...
your code looks correct, the banana cascade loads fine for me[and does not crash] (ocv3.0, locally built libs), so it's probably something with your setup.
@berak : That is the thing. It loads fine for me too but there may be something critical in the classifier file that effects it all. Bcoz, I replaced the banana_classifier path with face one and the same above code worked right! Do you happen to know about classifier structure or have a link/resource on that, it would be helpful. Thanks