运行到CvHaarClassifierCascade*pHaarCascade=(CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName,0,0,0);这一步的时候提示:0x74f3812f(KernelBase.dll)处有未经处理的异常:MicrosoftC++异常:内存位置0x0022f184处的cv::Exception。
网上看了看解决方法没有完全理解,折腾一圈还是不行,Haar用不起来呢,求大神指点迷津。
总体程序如下:
#include"cv.h"
#include
#include
#include
#include
usingnamespacestd;
usingnamespacecv;
intmain()
{
//加载Haar特征检测分类器
//haarcascade_frontalface_alt.xml系OpenCV自带的分类器
constchar*pstrCascadeFileName="haarcascade_frontalface_alt2.xml";
CvHaarClassifierCascade*pHaarCascade=(CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName,0,0,0);
//载入图像
doublesacle=1.2;
constchar*pstrImageName="qq.jpg";
IplImage*pSrcImage=cvLoadImage(pstrImageName,CV_LOAD_IMAGE_UNCHANGED);
IplImage*pGrayImage=cvCreateImage(cvGetSize(pSrcImage),IPL_DEPTH_8U,1);
IplImage*small_img=cvCreateImage(cvSize(cvRound(pSrcImage->width/sacle),cvRound(pSrcImage->height/sacle)),IPL_DEPTH_8U,1);
cvCvtColor(pSrcImage,pGrayImage,CV_BGR2GRAY);
cvResize(pGrayImage,small_img,CV_INTER_LINEAR);
cvEqualizeHist(small_img,small_img);
//人脸识别与标记
if(pHaarCascade!=NULL)
{
CvScalarFaceCirclecolors[]=
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{255,0,0}},
{{255,0,255}}
};
CvMemStorage*pcvMStorage=cvCreateMemStorage(0);
cvClearMemStorage(pcvMStorage);
//识别
DWORDdwTimeBegin,dwTimeEnd;
dwTimeBegin=GetTickCount();
CvSeq*pcvSeqFaces=cvHaarDetectObjects(small_img,pHaarCascade,pcvMStorage,1.1,2,0/*CV_HAAR_DOCANNY_PRUNING*/,cvSize(30,30));
dwTimeEnd=GetTickCount();
printf("人脸个数:%d识别用时:%dms\n",pcvSeqFaces->total,dwTimeEnd-dwTimeBegin);
//标记
for(inti=0;itotal;i++)
{
CvRect*r=(CvRect*)cvGetSeqElem(pcvSeqFaces,i);
CvPointcenter;
intradius;
center.x=cvRound((r->x+r->width*0.5));
center.y=cvRound((r->y+r->height*0.5));
radius=cvRound((r->width+r->height)*0.25);
cvCircle(pSrcImage,center,radius,FaceCirclecolors[i%8],2);
}
cvReleaseMemStorage(&pcvMStorage);
}
constchar*pstrWindowsTitle="人脸识别";
cvNamedWindow(pstrWindowsTitle,CV_WINDOW_AUTOSIZE);
cvShowImage(pstrWindowsTitle,pSrcImage);
cvWaitKey(0);
cvDestroyWindow(pstrWindowsTitle);
cvReleaseImage(&pSrcImage);
cvReleaseImage(&pGrayImage);
return0;
}
分 -->
|