项目运行涉及到opencv库,以及haarcascade_frontalface_default.xml和haarcascade_eye_tree_eyeglasses.xml。qt配置opencv可见先前文章,另外这两份OpenCV 中用于眼睛检测的级联分类器xml文件,是我在网上下载的。
把要使用到的文件都放到当前工程目录下:
相关代码:
#include <opencv2/imgcodecs.hpp>
#include <opencv2/core.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/core/hal/interface.h>
#include <opencv2/features2d/hal/interface.h>
#include <opencv2/imgproc/hal/interface.h>
#include <opencv2/objdetect.hpp>QString imgPath = "D:\\Qt\\File\\open_test\\zyh.jpg";cv::Mat imgMat = cv::imread(imgPath.toStdString());//脸部识别cv::CascadeClassifier faceCascade;faceCascade.load("D:\\Qt\\File\\open_test\\opencv\\haarcascades\\haarcascade_frontalface_default.xml");if(faceCascade.empty())std::cout<< "face XML file not loaded"<<std::endl;std::vector<cv::Rect> faces;faceCascade.detectMultiScale(imgMat, faces, 1.1, 10);for(int i=0; i<faces.size(); i++){cv::rectangle(imgMat, faces[i].tl(), faces[i].br(), cv::Scalar(255,0,255),3);}//眼部识别cv::CascadeClassifier eyeCascade;eyeCascade.load("D:\\Qt\\File\\open_test\\opencv\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml");if(eyeCascade.empty())std::cout<< "eye XML file not loaded"<<std::endl;std::vector<cv::Rect> eyes;eyeCascade.detectMultiScale(imgMat, eyes, 1.1, 10);for(int i=0; i<eyes.size(); i++){cv::rectangle(imgMat, eyes[i].tl(), eyes[i].br(), cv::Scalar(255,0,0),1);}cv::imshow("Image", imgMat);