vs2010+opencv249人脸正侧脸摄像头实时检测并调用对应不同小视频

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <math.h>
#include <cv.h> 
#include <cstdio>  
#include <cstdlib>

#include<highgui.h>
#include<windows.h> 


void facedetection(int x);
void avatar0();
void avatar1();

int main ()
{
        CvCapture *capture=cvCreateCameraCapture(0);
        cvNamedWindow("camera",CV_WINDOW_AUTOSIZE);
        IplImage *image;
        char file_name[15];
        int i;
        while(1)
        {
                for(i=0;i<1000;i++)
                {
                        image=cvQueryFrame(capture);
                        if(!image)
                                break;
                        cvShowImage("camera",image);
                        char c=cvWaitKey(20); 
						sprintf(file_name,"G:\\%d.jpg",i);//G盘根目录下生成
                        cvSaveImage(file_name,image);
                        if(c==27)
                        {
                                cvReleaseCapture(&capture);
                                cvDestroyWindow("hh");
                                exit(0);
                         }//按esc退出
                       
						facedetection(i);
                }

        }
}

void facedetection(int x)  
{  
	int radius,t;
	char fileName[50];


	//for (int x = 1; x <= 300; x++)
	//{
	sprintf_s(fileName, "G:\\iii\\%d.jpg", x);

    // 加载Haar特征检测分类器  
    // haarcascade_frontalface_alt.xml系OpenCV自带的分类器 下面是我机器上的文件路径 
	if(x%75==0)
	{
		const char *pstrCascadeFileName1 = "E:\\Opencv249\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml";  
        CvHaarClassifierCascade *pHaarCascade1 = NULL;  
        pHaarCascade1 = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName1);   
  

    // 载入图像  
        const char *pstrImageName1 =fileName;    
        IplImage *pSrcImage1 = cvLoadImage(pstrImageName1, CV_LOAD_IMAGE_UNCHANGED);  
      
        IplImage *pGrayImage1 = cvCreateImage(cvGetSize(pSrcImage1), IPL_DEPTH_8U, 1);  
        cvCvtColor(pSrcImage1, pGrayImage1, CV_BGR2GRAY);  

    // 人脸识别与标记  
        if (pHaarCascade1 != NULL)  
        {         
            CvScalar FaceCirclecolors[] =   
            {  
			    {{255, 0, 0}} 
            };  
  
        CvMemStorage *pcvMStorage1 = cvCreateMemStorage(0);  
        cvClearMemStorage(pcvMStorage1);  
        // 识别  
        DWORD dwTimeBegin, dwTimeEnd;  
        dwTimeBegin = GetTickCount();  
        CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage1, pHaarCascade1, pcvMStorage1);  
        dwTimeEnd = GetTickCount();  
  
        printf("正脸个数: %d   识别用时: %d ms\n", pcvSeqFaces->total, dwTimeEnd - dwTimeBegin);  
		t=(pcvSeqFaces->total);
       // printf("****   %d   ****\n",t);
        // 标记 

        for(int i = 0; i <pcvSeqFaces->total; i++)  
        {  
            CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);
            CvPoint center;  
            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); 
			printf("半径:%d\n",radius);
			if(radius>50)
			{
            cvCircle(pSrcImage1, center, radius, FaceCirclecolors[0], 2);
			}
        }  
        cvReleaseMemStorage(&pcvMStorage1);  
    
	    const char *pstrWindowsTitle1 = "人脸识别 ";  
        cvNamedWindow(pstrWindowsTitle1, CV_WINDOW_AUTOSIZE);  
        cvShowImage(pstrWindowsTitle1, pSrcImage1);  
	    if(radius>50)
	    {
	        avatar0();
	    }
		cvDestroyWindow("人脸识别 ");
	    //cvWaitKey(0);  
        cvDestroyWindow(pstrWindowsTitle1); 
	    }  
		
	//*********************************** 
		if(t==0)
		{
        const char *pstrCascadeFileName = "E:\\Opencv249\\opencv\\sources\\data\\haarcascades\\haarcascade_profileface.xml";  
        CvHaarClassifierCascade *pHaarCascade = NULL;  
        pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);

	    const char *pstrImageName =fileName;    
        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[] =   
           {  
			    {{255, 0, 0}} 
           };  
  
        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;  
            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); 
			printf("半径:%d\n",radius);
			if(radius>50)
			{
            cvCircle(pSrcImage, center, radius, FaceCirclecolors[0], 2);
			}
        }  
        cvReleaseMemStorage(&pcvMStorage);  
    
	    const char *pstrWindowsTitle = "人脸识别侧脸";  
        cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);  
        cvShowImage(pstrWindowsTitle, pSrcImage);  
	    if(radius>50)
	    {
	        avatar1();
	    }
	    //cvWaitKey(0);  
        cvDestroyWindow(pstrWindowsTitle); 
	}  
    cvReleaseImage(&pSrcImage);   
    cvReleaseImage(&pGrayImage); 
	}
	cvReleaseImage(&pSrcImage1);   
    cvReleaseImage(&pGrayImage1);
	}  
} 

void avatar0()
{
   cvNamedWindow("hello",1);
   CvCapture* capture = cvCreateFileCapture("C:\\Users\\dell\\Desktop\\hi2.avi");
   IplImage* frame;
   while(1)
   {
      frame = cvQueryFrame(capture);
      if(!frame)
          break;
      cvShowImage("hello",frame);
      char c = cvWaitKey(33);
      if(c == 27)
      break;  }
   cvReleaseCapture(&capture);
 
   cvDestroyWindow("hello");
}

void avatar1()
{
   cvNamedWindow("hello",1);
   CvCapture* capture = cvCreateFileCapture("C:\\Users\\dell\\Desktop\\hi1.avi");
   IplImage* frame;
   while(1)
   {
      frame = cvQueryFrame(capture);
      if(!frame)
          break;
      cvShowImage("hello",frame);
      char c = cvWaitKey(33);
      if(c == 27)
      break;   }
   cvReleaseCapture(&capture);

   cvDestroyWindow("hello");
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值