用opencv自带的Haar做人脸检测生成成功但是调试一直中断

[复制链接]
查看11 | 回复8 | 2021-1-27 06:45:35 | 显示全部楼层 |阅读模式
运行到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;
}

分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
建议楼主先编译链接调试OpenCV自带的相关例子代码。
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
trycatch捕获该cv::Exception异常并输出该异常的相关信息,看看究竟是什么错误
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用1楼zhao4zhong1的回复:建议楼主先编译链接调试OpenCV自带的相关例子代码。我试过那本学习opencv里面关于检测人脸的代码了一样的错误诶不知道为什么
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用2楼CharlesSimonyi的回复:trycatch捕获该cv::Exception异常并输出该异常的相关信息,看看究竟是什么错误能具体告诉我怎么做吗我是小白不太会操作谢谢啦
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用3楼omqapntc的回复:Quote: 引用1楼zhao4zhong1的回复:
建议楼主先编译链接调试OpenCV自带的相关例子代码。
我试过那本学习opencv里面关于检测人脸的代码了一样的错误诶不知道为什么

“学习OpenCV书中的代码”和“OpenCV自带的相关例子代码”不是一回事!
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用5楼zhao4zhong1的回复:Quote: 引用3楼omqapntc的回复:
Quote: 引用1楼zhao4zhong1的回复:
建议楼主先编译链接调试OpenCV自带的相关例子代码。
我试过那本学习opencv里面关于检测人脸的代码了一样的错误诶不知道为什么

“学习OpenCV书中的代码”和“OpenCV自带的相关例子代码”不是一回事!
嗯我也试了Opencv自带的程序运行是没有问题的没有错误但就是这个有问题不知是为什么
回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看CallStack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。

回复

使用道具 举报

千问 | 2021-1-27 06:45:35 | 显示全部楼层
引用7楼zhao4zhong1的回复:崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看CallStack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
谢谢
还想请问您一下opencv自带例子里面这样一段代码什么意思呢我发现把它去掉就不会检测了
for(inti=1;i引用9楼zhao4zhong1的回复:OpenCV是开源的。你不懂某个函数,可以单步跟踪到函数实现的源代码中去一探究竟。嗯它应该是加载分类器用的可以为什么换成)cvLoad就加载不了了呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行