相机实时人脸检测
需要使用人脸训练库的参数;
opencv3.4.14资源包
将opencv源代码中:./data/haarcascades 文件夹赋值工程的bin目录下。
opencv环境搭建可以看我往期文章:OpenCV安装、QT、VS配置项目设置
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void PrintMs(const char* text = "")
{
static long long last = 0;
long long cur = getTickCount();
if (last == 0)
{
last = cur;
return;
}
long long ms = 0;
ms = ((double)(cur - last) / getTickFrequency()) * 1000;
if (*text != 0)
{
printf("%s = %dms\n", text, ms);
}
last = getTickCount();
}
int main(int argc, char** argv) {
String cascadeFilePath = "./haarcascades/haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
if (!face_cascade.load(cascadeFilePath)) {
printf("could not load haar data...\n");
return -1;
}
Mat src, gray_src;
VideoCapture cam(0);
if (!cam.isOpened())
{
cout << "cam open failed!" << endl;
getchar();
return -1;
}
while (true)
{
PrintMs();
cam.read(src);
if (src.empty()) break;
flip(src, src, 1);
cvtColor(src, gray_src, COLOR_BGR2GRAY);
equalizeHist(gray_src, gray_src); // 直方图均衡化,有利于人脸检出
imshow("input image", src);
vector<Rect> faces;
face_cascade.detectMultiScale(gray_src, faces, 1.1, 2, 0, Size(30, 30));
for (size_t t = 0; t < faces.size(); t++) {
rectangle(src, faces[t], Scalar(0, 0, 255), 2, 8, 0);
}
namedWindow("output", CV_WINDOW_AUTOSIZE);
imshow("output", src);
PrintMs("face detect time: "); // AMD5800H 120ms左右
if (waitKey(5) == 'q') break;
}
waitKey(0);
return 0;
}