opencv从摄像头读取视频并实时进行人脸检测代码

     // 加载Haar特征检测分类器    
     // haarcascade_frontalface_alt.xml系OpenCV自带的分类器 下面是我机器上的文件路径    
     const char *pstrCascadeFileName = "F:\\haarcascade_frontalface_alt.xml";    
     CvHaarClassifierCascade *pHaarCascade = NULL;    
     pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);
    
    IplImage* motion = 0;   
    CvCapture* capture = 0; //视频获取结构   
      
    capture = cvCaptureFromCAM( 0 );  
    //capture = cvCaptureFromAVI( "1344.avi" );  
    if( capture )  
    {  
        cvNamedWindow( "Motion", 1 );  
        for(;;)  
        {  
            IplImage* image;  
            if( !cvGrabFrame( capture )) //从摄像头或者视频文件中抓取帧  
                break;  
            image = cvRetrieveFrame( capture ); //取回由函数cvGrabFrame抓取的图像,返回由函数cvGrabFrame 抓取的图像的指针  
            cvShowImage( "Motion", image ); 
IplImage *pGrayImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);    
            cvCvtColor(image, pGrayImage, CV_BGR2GRAY); 
cvNamedWindow("灰度图",1);
cvShowImage("灰度图",pGrayImage);
            if( cvWaitKey(10) >= 0 )  
                break;  


 
//const char *pstrImageName = "F:\\z.jpg";    
            //IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);    
        

    
    // 人脸识别与标记    
    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\n", 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(image, center, radius, FaceCirclecolors[i % 8], 2);    
        }    
        cvReleaseMemStorage(&pcvMStorage);    
    }    
        
    const char *pstrWindowsTitle = "人脸检测 ";    
    cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);    
    cvShowImage(pstrWindowsTitle, image);    
    
   /* cvWaitKey(0);    
    
    cvDestroyWindow(pstrWindowsTitle);    
    cvReleaseImage(&image);     
    cvReleaseImage(&pGrayImage);    
    return 0;   */ 
        }  
        cvReleaseCapture( &capture );  
        cvDestroyWindow( "Motion" );  
    }  
  

    return 0;  


参考地址:http://blog.csdn.net/zhangjikuan/article/details/39926317

注意的问题:在加载Haar特征检测分类器 的时候,网上说是...opencv/sources/data/haarcascades下的haarcascade_frontalface_alt.xml,结果运行会出现加载分类器的错误。后来发现应该是data目录下的haarcascades_cuda下的

haarcascade_frontalface_alt.xml。(我用的是opencv 3.0版本)

加载分类器的错误

加载分类器的错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值