我想使用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();
}
}
这是例外情况:
我的电脑是x64架构,图像尺寸为800 x 600,我使用的OpenCV版本为3.1。为什么会发生这种异常?