opencv_world300.dll CRASH MSVC++ 2013

asked 2015-03-30 11:17:26 -0500

pulp_fiction gravatar image

updated 2015-03-30 11:40:29 -0500

Hello, I have decided to use OpenCV in my project to detect objects. After 3 days of troubleshooting problems in the Installation, Configuration of OpenCV in Microsoft Visual Studio, I finally managed to get the Display Image program working.
The problem starts now. I tried running the sample objectdetect.cpp(copied the source code from here to main.cpp in my project) program already provided in opencv sample. I put the xml files for detection with the main.cpp file in my project. I get a APPCRASH error with the cause opencv_world300.dll.

Environment Details:
OpenCV version: 3.0.0
Build target platform: x64
OS: Win7-x64
Visual Studio 2013

I am using pre built libraries in build/x64/vc12/bin/*.dll. I have only referenced the opencv_world300.lib/opencv_world300.dll. These are combined libs of all others. I have followed the configuration settings as described in various tutorials around the web.
I have included the project as an attachment. To be able to successfully able to run the project on your PC, you must have opencv extracted in C:/ and I have provided a OpenCV_x64_config.props property sheet. Copy this file to Microsoft Visual Studio/project directory. Rest everything should hopefully work without any change. Also, I have checked the Microsoft Symbol Server import option. Without it, the project won't work.
Here is the download link:
http://www.datafilehost.com/d/fdb0935a

Problem Description:
The program starts with successfully detecting the WebCam. and calling the detectAndDisplay() method. The problem is in the implementation of this method that my program crashes. Here is the main.cpp file for your reference:
I am a complete Newbie to OpenCV. Please help me!

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

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

    //-- Detect faces
    face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));

    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 ...
(more)
edit retag flag offensive close merge delete

Comments

1

Consider using the debug libraries (suffix d under windows) when developing, it can give you more detailed information where things crash if it is in OpenCV.

Can it be something with the drawing? drawing outside the cv::Mat boundaries for example? I think you should try to debug your application and see where exactly it crashes.

boaz001 gravatar imageboaz001 ( 2015-03-30 11:30:54 -0500 )edit
1

Yes I tried debugging. The call face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30)); leads to sequence of calls in opencv_world300d.dll and exception happens somewhere in the unknown stack. But you can see, it happens in this line 74 of the above code. What do I infer from this.

pulp_fiction gravatar imagepulp_fiction ( 2015-03-30 11:58:42 -0500 )edit

Can you post the stack trace? Is assume there is no exception? This information could be relevant if it appears to be a bug in OpenCV.

There are a few things you can maybe try. Can you try a smaller minSize or leave out the parameter at all? Try to leave out all optional parameters of detectMultiScale. There seem to be open issues related to this function.

aha! interesting, this looks very similar... which is fixed recently by this Pull Request. If you can build OpenCV yourself you can check if that fixes your issue.

boaz001 gravatar imageboaz001 ( 2015-03-30 17:35:41 -0500 )edit