进入detectMultiScale函数就卡死
下午还能运行 晚上就不行了
比对的是自己训练的模型
训练模型没有报错
#include
#include
const char* face_cascade_name = "D:/opencv/image/cascade.xml";
void faceRecongize(cv::CascadeClassifier faceCascade, cv::Mat frame);
int main() {
cv::VideoCapture* videoCap = new cv::VideoCapture;
cv::CascadeClassifier faceCascade;
// 加载苹果分类器文件
if (!faceCascade.load(face_cascade_name)) {
std::cout << "load face_cascade_name failed. " << std::endl;
return -1;
}
std::cout << "load face_cascade_name" << std::endl;
// 打开摄像机
videoCap->open(0);
if (!videoCap->isOpened()) {
videoCap->release();
std::cout << "open camera failed" << std::endl;
return -1;
}
std::cout << "open camera success" << std::endl;
while (1) {
cv::Mat frame;
//读取视频帧
videoCap->read(frame);
if (frame.empty()) {
videoCap->release();
return -1;
}
std::cout << "读取视频帧成功" << std::endl;
//进行苹果识别
faceRecongize(faceCascade, frame);
//窗口进行展示
imshow("face", frame);
//等待回车键按下退出程序
if (cv::waitKey(1) == 13) {
cv::destroyAllWindows();
return 0;
}
}
system("pause");
return 0;
}
void faceRecongize(cv::CascadeClassifier faceCascade, cv::Mat frame) {
std::vector faces;
std::cout << "开始检测" << std::endl;
// 检测
if(cv::waitKey(1) == 32) faceCascade.detectMultiScale(frame, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(100, 100));
std::cout << "检测成功" << std::endl;
for (int i = 0; i < faces.size(); i++) {
//for (int i = 0; i < 1; i++) {
// 用椭圆画出检测部分
cv::Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);
ellipse(frame, center, cv::Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, cv::Scalar(255, 0, 255), 4, 8, 0);
cv::Mat faceROI = frame(faces[i]);
std::vector eyes;
// 检测上方区域写字进行标识
cv::Point centerText(faces[i].x + faces[i].width / 2 - 40, faces[i].y - 20);
cv::putText(frame, "apple", centerText, cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255), 2);
}
}