人脸识别是一直以来的热门行业,简单的人脸识别可以说是烂大街的了,现在还在不断进步优化人脸识别的,一般都是涉及到深度学习或者设计算法的。当然,这些后面是要有一定水平的人去弄的。
本人简单的设计了一个基于QT和opencv的人脸识别
前提先说明一下,因为是直接调用到cv的FaceRecognizer,因此精确方面可能是有些欠缺的,不过不妨碍作为想QT和opencv一起学习的同学作为练手项目或者作业。
话不多说
先要有一下工具
当然如果vs是13以上版本,则要相应的opencv3.1以上,opencv3.1以上版本,此时有个问题,就是opencv中的FaceRecognizer是要在contrib模块中才有提供
在opencv3.0后的版本中是剔除了contrib模块,所以要要自己去增加这个模块。可以使用cmake方法编译来加入工程中。至于具体如何实现可以再去找其他资料(网上很多)。
首先第一步是在VS中打开QT工程,然后进行opencv的配置 , 具体看链接
https://blog.csdn.net/wsf09/article/details/78853823
建好工程后可以设计一下大概的按钮工具,框架
(这是我初略布局的图)
第一步肯定就是要截取人的头部图像,作为样本数据来储存训练
connect(ui.pushButton, SIGNAL(clicked(bool)), this, SLOT(OkBtn(bool)));
点击确定按钮则进入相对应的槽进行打开摄像头
Mat frame;
cv::VideoCapture capture(1);
vector compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
int i = 0;
while (i != 100)
{
char key = cv::waitKey(100);
capture >> frame;
imshow("frame", frame);
std::string filename = cv::format("AddData/%d.jpg", i + 1);
switch (key)
{
case'p':
i++;
imwrite(filename, frame, compression_params);
imshow("photo", frame);
cv::waitKey(500);
cv::destroyWindow("photo");
break;
default:
break;
}
}
最后停止的时候需要
capture.release();
cv::destroyWindow("frame");
cv::VideoCapture capture(1);表示的是启动usb摄像头,0是表示电脑自带的摄像头
当你截取到图片后在文件夹中会有截取到的图片
初步实现好上面的步骤后,
第二步是要进行图片处理
图片处理在下一篇中再具体给出代码分析