基于QT和opencv的人脸识别

人脸识别是一直以来的热门行业,简单的人脸识别可以说是烂大街的了,现在还在不断进步优化人脸识别的,一般都是涉及到深度学习或者设计算法的。当然,这些后面是要有一定水平的人去弄的。
本人简单的设计了一个基于QT和opencv的人脸识别
前提先说明一下,因为是直接调用到cv的FaceRecognizer,因此精确方面可能是有些欠缺的,不过不妨碍作为想QT和opencv一起学习的同学作为练手项目或者作业。
话不多说
先要有一下工具

  1. vs13
  2. QT5.6.2
  3. opencv2.4.9

当然如果vs是13以上版本,则要相应的opencv3.1以上,opencv3.1以上版本,此时有个问题,就是opencv中的FaceRecognizer是要在contrib模块中才有提供
在opencv3.0后的版本中是剔除了contrib模块,所以要要自己去增加这个模块。可以使用cmake方法编译来加入工程中。至于具体如何实现可以再去找其他资料(网上很多)。
首先第一步是在VS中打开QT工程,然后进行opencv的配置 , 具体看链接

https://blog.csdn.net/wsf09/article/details/78853823

建好工程后可以设计一下大概的按钮工具,框架
(这是我初略布局的图)
基于QT和opencv的人脸识别_第1张图片

第一步肯定就是要截取人的头部图像,作为样本数据来储存训练

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是表示电脑自带的摄像头

当你截取到图片后在文件夹中会有截取到的图片
基于QT和opencv的人脸识别_第2张图片
初步实现好上面的步骤后,
第二步是要进行图片处理
图片处理在下一篇中再具体给出代码分析

你可能感兴趣的:(opencv&QT)