问题描述:
在ROS上使用OpenCV实现人脸检测的过程中,遇到如下的问题:
即:
OpenCV Error: Assertion failed (!empty()) in detectMultiScale, file /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/objdetect/src/cascadedetect.cpp, line 1698
terminate called after throwing an instance of 'cv::Exception'
what(): /tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/objdetect/src/cascadedetect.cpp:1698: error: (-215) !empty() in function detectMultiScale
Aborted (core dumped)
分析:
OpenCV级联检测器Cascadedetect出现错误,可知是xml路径读取错误,发现在原始代码中face_cascade没有读取.xml文件。如下所示:
cv::CascadeClassifier face_cascade;
解决方案:
找到人脸识别相关的xml文件的位置,将xml文件添加到face_cascade中即可。如下:
cv::CascadeClassifier face_cascade = cv::CascadeClassifier("/home/opencv/opencv-3.4.4/data/haarcascades/haarcascade_frontalface_default.xml");
修改之后,代码调试通过,问题解决。
这里的xml文件也可以进行选择,识别眼睛可以选择haarcascade_eye.xml等等。