zoukankan      html  css  js  c++  java
  • OpenCV摄像头人脸识别

    注:

    从外设摄像装置中获取图像帧,把每帧的图片与人脸特征进行匹配,用方框框住识别出来的人脸

    需要用到的函数:

    CvHaarClassifierCascade* cvLoadHaarClassifierCascade( const char* directory, CvSize orig_window_size );

    第一个参数:训练好的级联分类器的路径

    第二个参数:级联分类器训练中采用的检测目标的尺寸

     

    #include "stdafx.h"
    #include "iostream"
    using namespace std;
    #include "opencv2/opencv.hpp"
    #include "cv.h"
    #include "highgui.h"
    #include "cxcore.h"
    #include "Windows.h"
    void main()
    {
    
        IplImage *pFrame = NULL;
        IplImage *pGrayImg = NULL;
    
        //加载Haar特征检测分类器  
        const char *pCascadeFileName = "E:/C_VC_code/opencv/haarcascade_frontalface_alt2.xml";
        //CvHaarClassifierCascade *pHaarCascade  = (CvHaarClassifierCascade*)cvLoad(pCascadeFileName);  
        CvHaarClassifierCascade *pHaarCascade  = cvLoadHaarClassifierCascade(pCascadeFileName,cvSize(200,200));  
    
        CvCapture *pCapture = cvCreateCameraCapture(0); //获取摄像头  
        cout<< "加载成功..." <<endl;
        int nFrmNum = 0;
    
        if(!pCapture)
        {
            cout<<"加载失败..."<<endl;
            return ;
        }
        //create window
        cvNamedWindow("Video",1);
        
        CvMemStorage *pcvMStorage; 
        CvSeq *pCvSeq;
    
        while(pFrame = cvQueryFrame(pCapture))    //逐帧读取
        {
            pGrayImg = cvCreateImage(cvGetSize(pFrame), IPL_DEPTH_8U, 1);
            cvCvtColor(pFrame, pGrayImg, CV_BGR2GRAY);  
    
            //---------------人脸识别-------------------------
            if (pHaarCascade != NULL)  
            {         
                pcvMStorage = cvCreateMemStorage(0);  
                cvClearMemStorage(pcvMStorage);
    
                // 识别  
                pCvSeq = cvHaarDetectObjects(pGrayImg, pHaarCascade, pcvMStorage);   
              
                // 标记  
                for(int i = 0; i <pCvSeq->total; i++)  
                {  
                    CvRect* r = (CvRect*)cvGetSeqElem(pCvSeq, i);  
                    CvPoint pt[4];
                    pt[0] = cvPoint(r->x,r->y);
                    pt[1] = cvPoint(r->x+r->width,r->y);
                    pt[2] = cvPoint(r->x+r->width,r->y+r->height);
                    pt[3] = cvPoint(r->x,r->y+r->height);
                    CvPoint* ppt=pt;
                    int count=4;
                    cvPolyLine( pFrame, &ppt,&count,1,1,CV_RGB(10,240,33),2);//画矩形
                }  
    
                cvReleaseMemStorage(&pcvMStorage);
            }  
          
            cvShowImage("Video",pFrame);
            //---------------人脸识别-------------------------
            char c = cvWaitKey(33);    //按esc退出
            if(c==27)
            {
                cvDestroyWindow("Video");  
                cvReleaseImage(&pFrame);   
                cvReleaseImage(&pGrayImg);  
                return;
            }
        }
    }
  • 相关阅读:
    正则表达式常用收集
    IIS 部署nodejs
    借助svn进行半自动多台服务器上线部署
    快速开发window服务器程序
    sql server 存储过程解密
    EF 剥坑
    测试常规需要测试的东西
    html5本次存储几种方式
    log4net 写日志配置
    js 获取定位信息
  • 原文地址:https://www.cnblogs.com/mypsq/p/4985459.html
Copyright © 2011-2022 走看看