lbpcascade_frontalface.xml与 haarcascade_eye_tree_eyeglasses.xml从摄像头中取最大的一张人脸进行人眼检测的c++程序
时间: 2023-02-12 10:51:37 浏览: 68
下面是一段示例 C 代码,它使用 OpenCV 库来实现人脸和眼睛检测:
```c
#include <opencv2/objdetect.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace cv;
using namespace std;
int main() {
// 加载人脸和眼睛分类器
CascadeClassifier faceCascade("lbpcascade_frontalface.xml");
CascadeClassifier eyeCascade("haarcascade_eye_tree_eyeglasses.xml");
// 打开摄像头
VideoCapture capture(0);
if (!capture.isOpened()) {
cout << "摄像头打开失败" << endl;
return -1;
}
// 循环读取每一帧
while (true) {
Mat frame;
capture >> frame;
if (frame.empty()) {
cout << "没有捕获到图像" << endl;
break;
}
// 将图像转化为灰度图像
Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY);
equalizeHist(gray, gray);
// 检测人脸
vector<Rect> faces;
faceCascade.detectMultiScale(gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
//找出最大的人脸
Rect faceRect;
int maxArea = 0;
for(auto &r:faces) {
int area = r.width * r.height;
if (area > maxArea) {
maxArea = area;
faceRect = r;
}
}
// 检测眼睛
Mat faceROI = gray(faceRect);
vector<Rect> eyes;
eyeCascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
// 画出人脸和眼睛的矩形框
for (size_t i = 0; i < eyes.size(); i++) {
Point center(faceRect.x + eyes[i].x + eyes[i].width / 2, faceRect.y + eyes[i].y + eyes[i].height / 2);
int radius = cvRound((eyes[i].width + eyes[i].height) * 0.25);
circle(frame, center, radius, Scalar(255,