基于OpenCV库的C代码示例,实现多个人脸目标检测,并把检测出的所有人脸图像通过裁剪和缩放显示,在一帧图像中
时间: 2024-02-13 15:59:42 浏览: 68
基于opencv的人脸识别和口罩检测代码(课程设计&期末大作业)python实现
好的,以下是基于OpenCV库的C代码示例,实现多个人脸目标检测,并把检测出的所有人脸图像通过裁剪和缩放显示,在一帧图像中的代码:
```c
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 加载人脸分类器
CascadeClassifier face_cascade;
if (!face_cascade.load("haarcascade_frontalface_alt.xml")) {
cout << "Error loading face cascade file!" << endl;
return -1;
}
// 打开摄像头
VideoCapture cap(0);
if (!cap.isOpened()) {
cout << "Error opening camera!" << endl;
return -1;
}
// 创建窗口
namedWindow("Face Detection", WINDOW_NORMAL);
while (true) {
// 读取一帧图像
Mat frame;
cap >> frame;
// 转换为灰度图像
Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY);
// 检测人脸
vector<Rect> faces;
face_cascade.detectMultiScale(gray, faces, 1.1, 2, 0, Size(30, 30));
// 在图像中画出人脸矩形框,并裁剪和缩放显示所有人脸图像
for (size_t i = 0; i < faces.size(); i++) {
// 画出人脸矩形框
rectangle(frame, faces[i], Scalar(0, 255, 0), 2);
// 裁剪人脸图像
Mat face = gray(faces[i]);
// 缩放显示人脸图像
Mat face_resized;
resize(face, face_resized, Size(100, 100));
// 显示人脸图像
imshow(format("Face %d", i+1), face_resized);
}
// 显示图像
imshow("Face Detection", frame);
// 等待按键
if (waitKey(30) == 27) { // ESC
break;
}
}
// 释放摄像头
cap.release();
// 关闭窗口
destroyAllWindows();
return 0;
}
```
在代码中,我们首先加载了人脸分类器,并打开了摄像头。然后,我们在一个无限循环中读取一帧图像,转换为灰度图像,并调用`detectMultiScale`函数检测人脸。如果检测到了人脸,我们就在图像中画出人脸矩形框,并裁剪和缩放显示所有人脸图像。最后,我们显示图像,并等待按键。如果按下了ESC键,就退出循环,释放摄像头,并关闭窗口。
注意,这里使用的是OpenCV 3.x版本的API,如果使用的是OpenCV 2.x版本的API,代码会有所不同。此外,如果你的摄像头不是默认的设备编号0,你需要根据实际情况修改代码中的摄像头编号。
阅读全文