由.detectMultiScale()函数调试引起的异常问题的解决方案

来源:互联网 发布:淘宝装修店招全屏代码 编辑:程序博客网 时间:2024/06/05 22:51

最近,在调试一个关于人脸特征点定位(face alignment)的程序时,出现了一些程序运行出现异常的问题,经过仔细分析之后,最终将问题解决了。以下是问题解决的基本过程。
注1:本人使用的平台:VS2013+openCV2.4.11,环境均已配置正确(一般情况下,看环境是否配置正确,只要写一个简单的读取图片和展示图片的小程序测试一下就可以啦)。
注2:调试异常如下:
这里写图片描述
0x53E0BC01 (opencv_objdetect2411.dll) (reco.exe 中)处的第一机会异常: 0xC0000005: 读取位置 0x00000002 时发生访问冲突。
0x53E0BC01 (opencv_objdetect2411.dll) (reco.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000002 时发生访问冲突。
注3:异常出现地方涉及的相关代码如下:

    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 | CV_HAAR_SCALE_IMAGE, Size(30, 30));        for (size_t i = 0; i < faces.size(); i++)        {            rectangle(frame, faces[i], Scalar(255, 0, 0), 1, 8, 0);            BoundingBox temp;

问题分析及解决过程:
1. 由于在对人脸特征点定位的前提条件是首先得进行人脸检测,检测到人脸之后才能进行人脸特征点定位。通过对程序进行单步调试,发现程序在运行至face_cascade.detectMultiScale()函数时,开始出现上述异常。
2. 该函数是openCV自带的一个目标检测的函数,基本上可以肯定应该不是该函数本身出现问题而导致异常的发生。
3. 对环境配置,包含文件,库文件,附加依赖项,运行模式,相应模式静态库文件.lib的选取等等均进行仔细检查,并没有发现问题。
4. 查找网上一些相关问题的解决方案。发现网上(百度,谷歌)并没有此类问题的解决方法。
5. 仔细想来,唯一有可能出现问题的地方应该就是openCV中opencv_calib3d2411.dll等动态库文件。
6. 一般运行复杂的工程时,由于openCV官方提供的编译库一般只是标准版本,可能会出现某些兼容性的问题,比如官方提供的编译好的版本与opengl就不兼容,这时就只能自己构建项目后编译。当然,一般工程使用的话,用官方提供的库即可。通过使用Cmake+VS对openCV库进行重新编译,以生成新的.dll文件以及.lib文件替换原有库中相应文件。
7. 文件替换之后,经过测试,程序已经可以成功运行。

0 0
原创粉丝点击