detectMultiScale上的AccessViolationException

时间:2016-03-24 13:17:43

标签: c++ opencv

我想使用CascadeClassifier来检测一张脸,但是当face_cascade.detectMultiScale在我的代码中执行时,会引发这样:AccessViolationException

这是我的代码:

#include "stdafx.h"
#include "FaceDetection.h"
using namespace cv;

FaceDetection::FaceDetection(void)
{
    face_cascade = CascadeClassifier();
    face_Cascade_Path = "D:\\book\\ComputerLessons\\CascadesFiles\\haarcascade_frontalface_alt.xml";
    face_cascade.load(face_Cascade_Path);
}

Mat FaceDetection::detect(Mat input){
    Mat face = Mat(input);
    faceExist = false;
    if (!face_cascade.empty())
    {
        std::vector<Rect> faces;
        faces.resize(1);
        Mat grayInput;
        cvtColor( input, grayInput, COLOR_BGR2GRAY );
        equalizeHist( grayInput, grayInput );
        face_cascade.detectMultiScale( grayInput, faces, 1.1, 2, CASCADE_SCALE_IMAGE, Size(100, 100));
        float maxArea = 0;
        int total = faces.size();
        if (total>0)
        {
            for (size_t i = 0; i < faces.size(); i++)
            {
                Rect r = faces[i];
                if (r.area() > maxArea)
                {
                    faceExist = true;
                    faceBound = r;
                    maxArea = r.area();
                }
            }
            face = input(faceBound);
        }
    }
    return face;
}
Rect FaceDetection::getBound(){
    if (faceExist)
    {
        return faceBound;
    }
    else
    {
        return Rect();
    }
}

这是例外情况:

Enter image description here

我的电脑是x64架构,图像尺寸为800 x 600,我使用的OpenCV版本为3.1。为什么会发生这种异常?

0 个答案:

没有答案