您的位置:首页 > 其它

07 实时读取双目视频,并对双目视频进行人脸识别

2018-01-30 14:31 337 查看
//程序功能:实时读取双目视频,并对双目视频进行人脸识别。
//功能参数:双目分辨率:1280*480,显示双目源视频,显示对双目进行人脸检测的效果视频
//官方网址:莱娜网 www.FpgaLena.com
//程序版本:2016-11-V1.0
//备注:程序第64行,需要根据电脑连接camera的情况进行参数设置。

#include <iostream>
#include <string>
#include <sstream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

const char* keys =
{
"{help h usage ? | | print this message}"
"{@video | | Video file, if not defined try to use webcamera}"
};

int main(int argc, const char** argv)            //程序主函数
{
//string xmlPath = "E:\\ZJ902\\Program Files\\OPENCV_3.1\\opencv\\build\\etc\\haarcascades\\haarcascade_frontalface_default.xml";
string xmlPath = "F:\\opencv\\opencv\\build\\etc\\haarcascades\\cascade_org.xml";
CascadeClassifier ccf;                       //创建分类器对象

if (!ccf.load(xmlPath))                      //加载训练文件
{
cout << "不能加载指定的xml文件" << endl;
return 0;
}
vector<Rect> faces;                          //创建一个容器保存检测出来的脸
Mat facegray;

CommandLineParser parser(argc, argv, keys);
parser.about("Video Capture");

if (parser.has("help"))                      //帮助信息
{
parser.printMessage();
return 0;
}
String videoFile = parser.get<String>(0);

if (!parser.check())
{
parser.printErrors();
return 0;
}

VideoCapture cap;
if (videoFile != "")
{
cap.open(videoFile);
}
else
{
//--此处需要根据电脑实际连接成像设备的情况,由客户自行进行参数调整------------------------------------
cap.open(0);                             //打开相机,电脑自带摄像头一般编号为0,外接摄像头编号为1(但不绝对,也可能是反过来的)
//--------------------------------------------------------------------------------------

cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);  //设置捕获视频的宽度
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);  //设置捕获视频的高度
}
if (!cap.isOpened())                         //判断是否成功打开相机
{
return -1;
}

Mat frame;
cap >> frame;                                //从相机捕获一帧图像

Mat grayImage;                               //用于存放灰度数据

while (1)
{
cap >> frame;                            //从相机捕获一帧图像

cvtColor(frame, facegray, CV_BGR2GRAY);  //转换成灰度图,因为harr特征从灰度图中提取
equalizeHist(facegray, facegray);        //直方图均衡
ccf.detectMultiScale(facegray, faces, 1.1, 3, 0, Size(10, 10), Size(500, 500));         //检测人脸
for (vector<Rect>::const_iterator iter = faces.begin(); iter != faces.end(); iter++)
{
//(iter)[1] = (iter)[1] + (iter)[1];
rectangle(frame, *iter, Scalar(0, 0, 255), 2, 8);                                   //将图像中的人脸用矩形框起来
}

namedWindow("人脸识别演示--莱娜网--机器视觉技术专家", 1);                               //实时显示双目视频
imshow("人脸识别演示--莱娜网--机器视觉技术专家", frame);

if (waitKey(30) >= 0) break;

}

cap.release();                               //释放对相机的控制
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: