zoukankan      html  css  js  c++  java
  • opencv 利用Haar 人脸识别

    #include <opencv2/opencv.hpp>
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    #include <Windows.h>  
    using namespace std;
    int main()
    {
        // 加载Haar特征检测分类器
        // haarcascade_frontalface_alt.xml系OpenCV自带的分类器 下面是我机器上的文件路径
        const char *pstrCascadeFileName = "D:\opencv\opencv2.4.10\opencv\sources\data\haarcascades\haarcascade_frontalface_alt.xml";
        CvHaarClassifierCascade *pHaarCascade = NULL;
        pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);
    
        // 载入图像
        const char *pstrImageName = "D:\721.jpg";
        IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);
        
        IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1);
        cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);
    
        // 人脸识别与标记
        if (pHaarCascade != NULL)
        {        
            CvScalar FaceCirclecolors[] = 
            {
                {{0, 0, 255}},
                {{0, 128, 255}},
                {{0, 255, 255}},
                {{0, 255, 0}},
                {{255, 128, 0}},
                {{255, 255, 0}},
                {{255, 0, 0}},
                {{255, 0, 255}}
            };
    
            CvMemStorage *pcvMStorage = cvCreateMemStorage(0);
            cvClearMemStorage(pcvMStorage);
            DWORD dwTimeBegin, dwTimeEnd;
            dwTimeBegin = GetTickCount();
            CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarCascade, pcvMStorage);
            dwTimeEnd = GetTickCount();
    
            printf("人脸个数: %d   识别用时: %d ms
    ", pcvSeqFaces->total, dwTimeEnd - dwTimeBegin);
            
            for(int i = 0; i <pcvSeqFaces->total; i++)
            {
                CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);
                CvPoint center;
                int radius;
                center.x = cvRound((r->x + r->width * 0.5));
                center.y = cvRound((r->y + r->height * 0.5));
                radius = cvRound((r->width + r->height) * 0.25);
                cvCircle(pSrcImage, center, radius, FaceCirclecolors[i % 8], 2);
            }
            cvReleaseMemStorage(&pcvMStorage);
        }
        
        const char *pstrWindowsTitle = "人脸识别";
        cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);
        cvShowImage(pstrWindowsTitle, pSrcImage);
    
        cvWaitKey(0);
    
        cvDestroyWindow(pstrWindowsTitle);
        cvReleaseImage(&pSrcImage);    
        cvReleaseImage(&pGrayImage);
        return 0;
    }
  • 相关阅读:
    BZOJ4066 简单题(KD-Tree)
    [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序
    [JSOI2007]重要的城市 floyd:最短路计数
    [SDOI2017]新生舞会 0/1分数规划
    [APIO2017]商旅 0/1分数规划
    [HNOI2009]最小圈
    算法——0/1分数规划
    运动员最佳匹配问题 KM算法:带权二分图匹配
    [NOI2015]荷马史诗
    [HAOI2010]计数 数位DP+组合数
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4216560.html
Copyright © 2011-2022 走看看