(四)OpenCV级联分类器训练与使用_02_Haar与LBP级联分类器使用

Bunny ·
更新时间:2024-09-20
· 879 次阅读

OpenCV中的HAAR与LBP数据
HAAR特征数据
LBP特征数据
数据格式XML #include #include using namespace std; using namespace cv; String Face_fileName = "haarcascade_frontalface_alt.xml";//opencv自带训练好的人脸识别级联器 String Eye_fileName = "haarcascade_eye_tree_eyeglasses.xml";//opencv自带训练好的人眼识别级联器 CascadeClassifier face_cascade;//人脸检测级联分类器 CascadeClassifier eye_cascade;//人眼检测级联分类器 int main(int argc, char** argv) { //各自检查人脸和人眼检测级联器是否能正常使用,此处必须分开判断 if (!face_cascade.load(Face_fileName)) { cout << "face_cascade error" << endl; return -1; }; if (!eye_cascade.load(Eye_fileName)) { cout << "eye_cascade error" << endl; return -2; }; namedWindow("VideoCapture", WINDOW_AUTOSIZE); //打开内置摄像头视频流 VideoCapture capture(0); Mat frame;//用来接capture Mat frame_gray; vector faces;//人脸区域 vector eyes;//人眼区域 while (capture.read(frame)) { cvtColor(frame, frame_gray, COLOR_BGR2GRAY);//转换为灰度图 equalizeHist(frame_gray, frame_gray);//直方图均衡化 face_cascade.detectMultiScale(frame_gray, faces, 1.2, 3, 0, Size(30, 30));//利用detectMultiScale搜索图像 for (size_t i = 0; i < faces.size(); i++) { //检索到人脸则画圆形 Point center_face(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5); //画椭圆 ellipse(frame, center_face, Size(faces[i].width*0.5, faces[i].height*0.5)/*长轴短轴*/, 0, 0, 360, Scalar(0, 255, 255), 4, 8, 0); //在检测到人脸的基础上,检测人眼并画圆形 Mat Eye_frame = frame_gray(faces[i]);//灰度的人眼图像,被包含在人脸图像里 eye_cascade.detectMultiScale(Eye_frame, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30)); for (size_t j = 0; j < eyes.size(); j++) { //faces[i].x是检测到的人脸框起始点(相对于窗口),而eyes包含在faces中,所以eyes[j].x是相对faces检测到的人眼起始点,所以faces[i].x + eyes[j].x + eyes[j].width*0.5是相对于整个窗口的人眼中心点 Point center_eye(faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5); int radius = cvRound((eyes[j].width + eyes[j].height) / 4);//cvRound四舍五入取整/cvFloor向下取整/cvCeil向上取整 //画正圆 circle(frame, center_eye, radius, Scalar(0, 128, 255), 3, 8); } imshow("VideoCapture", frame); char c = waitKey(30); if (c == 27) { break; } } } waitKey(0); return 0; }

输出结果:
摄像头采集检测到人脸与人眼,并在人脸处绘制黄色圆,在人眼处绘制橙色圆。


作者:丶小早



lbp 训练 分类 分类器 opencv

需要 登录 后方可回复, 如果你还没有账号请 注册新账号