opencv 打开摄像头 并检测人脸

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kidults/article/details/89633100

前两篇写了opencv的 编译配置,接下来说说opencv如何打开摄像头并检测视频中的人脸

在opencv源码目录的 data文件夹下 有很多的检测模板
在这里插入图片描述
我们选择其中一个人脸检测的模板

 CascadeClassifier ccf;
 if(!ccf.load("****.xml")){  //加载检测模板
        return;
  }

    VideoCapture capture;   
    std::vector<Rect> faces;
       
        if(!capture.isOpened()){  //摄像头未打开
            capture.release();
            capture.open(0);  //打开摄像头
            
//            capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度
//            capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度
//            capture.set(CV_CAP_PROP_FPS, 30);//帧率 帧/秒
//            capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 1
//            capture.set(CV_CAP_PROP_CONTRAST,40);//对比度 40
//            capture.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50
//            capture.set(CV_CAP_PROP_HUE, 50);//色调 50
//            capture.set(CV_CAP_PROP_EXPOSURE, -3);//曝光

            capture.set(cv::CAP_PROP_FOURCC,VideoWriter::fourcc('M','J','P','G'));

        }

        Mat img,gray;
        bool ret = capture.read(img);   //读取摄像头
        if(!ret){   //读取失败
            capture.release();
        }

        //x,y坐标变换
       // transpose(img,img);

        cvtColor(img,gray,CV_BGR2GRAY);  //转为灰度图
        equalizeHist(gray,gray);   //直方图均衡化
        ccf.detectMultiScale(gray,faces,1.1,3,0,cv::Size(150,150),cv::Size(400,400)); //检测人脸
 
		//遍历检测到的人脸
        for(std::vector<Rect>::const_iterator item=faces.begin();item!=faces.end();item++)
        {
            Rect rectFace = Rect( item.base()->x,item.base()->y,item.base()->width,item.base()->height);
            rectangle(gray,rectFace,Scalar(47,42,203),2); //opencv bgr 顺序          //标记人脸 
        }
        //上面的代码只是做了一个实例,在正式的程序中,肯定是要写到线程中的
 		//imshow("face",gray);


猜你喜欢

转载自blog.csdn.net/kidults/article/details/89633100