如何使用visualStudio+OpenCV 3.0进行人脸识别

2025-10-24 13:06:05

1、创建一个C++控制台工程,将OpenCV 3.0的相关依赖包和执行库设置到工程的环境中,使得我们的C++工程可以调用OpenCV 3.0的相关库。

具体的opencv+visual studio 2018的工程环境配置请参考一下经验链接。

如何使用visualStudio+OpenCV 3.0进行人脸识别

2、在工程中引入OpenCV库,并定义相关的namespace

#include <opencv2/opencv.hpp>

#include <opencv2/core.hpp>

#include <opencv2/imgproc.hpp>

#include <opencv2/highgui.hpp>

#include <iostream>

#include <string>

#include <stdlib.h>

using namespace std;

using namespace cv;

如何使用visualStudio+OpenCV 3.0进行人脸识别

3、我们使用OpenCV 3.4自身带的人脸识别训练模型数据进行人脸识别

从本地加载人脸识别特征库

String facefile = "E:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";

//脸部识别分类器加载

CascadeClassifier faceCascader;

if (!faceCascader.load(facefile)) {

printf("无法加载脸部特征文件:%s",facefile);

return;

}

如何使用visualStudio+OpenCV 3.0进行人脸识别

4、打开本地的摄像头,获取图像帧,进行人脸识别

1)定义一个摄像头窗口

namedWindow("摄像头", CV_WINDOW_AUTOSIZE);

2)打开摄像头

VideoCapture capture(0);//打开摄像头

3)循环读取视频帧,每帧之间需要有时延

while (capture.read(frame)) {

      imshow("摄像头", frame);

     //必须加时延,否则无法显示图像

     char key = waitKey(30);

}

如何使用visualStudio+OpenCV 3.0进行人脸识别

5、对视频的每帧图像进行人脸识别,识别到人脸后将人脸区域作为图像保存到本地

while (capture.read(frame)) {

//图像变灰

cvtColor(frame, gray, COLOR_RGB2GRAY);

equalizeHist(gray, gray);

faceCascader.detectMultiScale(gray, faces, 1.2, 3, 0, Size(30, 30));

for (size_t faceSize=0;faceSize<faces.size();faceSize++)

{

Rect roi;

roi.x = faces[static_cast<int>(faceSize)].x;

roi.y = faces[static_cast<int>(faceSize)].y;

roi.width = faces[static_cast<int>(faceSize)].width;

roi.height = faces[static_cast<int>(faceSize)].height ;

Mat faceROI = frame(roi);

//在人脸区域画一个矩形

rectangle(frame, faces[static_cast<int>(faceSize)], Scalar(0, 0, 255), 2, 8, 0);

sn++;

//将sn整型值转为字符串

stringstream stream;

stream << sn;

//生产一个新的文件名

String snStr = "F:\\mm\\1\\img-" + stream.str() + ".jpg";

cout << snStr << endl;

imwrite(snStr, faceROI);

}

imshow("摄像头", frame);

//必须加时延,否则无法显示图像

char key = waitKey(30);

//按ESC键退出

if (key == 27) {

break;

}

}

如何使用visualStudio+OpenCV 3.0进行人脸识别

6、进行测试,看看测试结果中是否有保存的人脸识别图片

1)运行程序

2)程序驱动后,会打开摄像头

3)人脸对着摄像头

4)程序自动循环识别每帧的人脸部分

5)将人脸部分保存到本地

如何使用visualStudio+OpenCV 3.0进行人脸识别

如何使用visualStudio+OpenCV 3.0进行人脸识别

7、完整代码:

#include <opencv2/opencv.hpp>

#include <opencv2/core.hpp>

#include <opencv2/imgproc.hpp>

#include <opencv2/highgui.hpp>

#include <iostream>

#include <string>

#include <stdlib.h>

using namespace std;

using namespace cv;

//人脸识别

void faceTest()

{

String facefile = "E:\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_alt.xml";

//脸部识别分类器

CascadeClassifier faceCascader;

if (!faceCascader.load(facefile)) {

printf("无法加载脸部特征文件:%s",facefile);

return;

}

namedWindow("摄像头", CV_WINDOW_AUTOSIZE);

VideoCapture capture(0);//打开摄像头

Mat frame;

Mat gray;

vector<Rect> faces;

int sn = 0;

//实时读取摄像头的图像帧

while (capture.read(frame)) {

//图像变灰

cvtColor(frame, gray, COLOR_RGB2GRAY);

equalizeHist(gray, gray);

faceCascader.detectMultiScale(gray, faces, 1.2, 3, 0, Size(30, 30));

for (size_t faceSize=0;faceSize<faces.size();faceSize++)

{

Rect roi;

roi.x = faces[static_cast<int>(faceSize)].x;

roi.y = faces[static_cast<int>(faceSize)].y;

roi.width = faces[static_cast<int>(faceSize)].width;

roi.height = faces[static_cast<int>(faceSize)].height ;

Mat faceROI = frame(roi);

//在人脸区域画一个矩形

rectangle(frame, faces[static_cast<int>(faceSize)], Scalar(0, 0, 255), 2, 8, 0);

sn++;

//将sn整型值转为字符串

stringstream stream;

stream << sn;

//生产一个新的文件名

String snStr = "F:\\mm\\1\\img-" + stream.str() + ".jpg";

cout << snStr << endl;

imwrite(snStr, faceROI);

}

imshow("摄像头", frame);

//必须加时延,否则无法显示图像

char key = waitKey(30);

//按ESC键退出

if (key == 27) {

break;

}

}

}

int main()

{

faceTest();

waitKey(0);

return 0;

}

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢