zoukankan      html  css  js  c++  java
  • opencv::视频人脸检测

    视频流抓取人脸和眼睛

    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    using namespace std;
    
    CascadeClassifier face_cascader; //分类器
    CascadeClassifier eye_cascader;
    String facefile = "D:/Appinstall/opencv-3.4.4_vc15/etc/haarcascades/haarcascade_frontalface_alt.xml";
    String eyefile =  "D:/Appinstall/opencv-3.4.4_vc15/etc/haarcascades/haarcascade_eye.xml";
    
    int main(int argc, char** argv) {
        if (!face_cascader.load(facefile)) {
            printf("could not load face feature data...
    ");
            return -1;
        }
        if (!eye_cascader.load(eyefile)) {
            printf("could not load eye feature data...
    ");
            return -1;
        }
        namedWindow("camera-demo", CV_WINDOW_AUTOSIZE);
        VideoCapture capture(0); //读取摄像头视频流
        Mat frame;
        Mat gray;
        vector<Rect> faces;
        vector<Rect> eyes;
        while (capture.read(frame)) {
            cvtColor(frame, gray, COLOR_BGR2GRAY);
            equalizeHist(gray, gray);
            face_cascader.detectMultiScale(gray, faces, 1.2, 3, 0, Size(30, 30));
            for (size_t t = 0; t < faces.size(); t++) {
                Rect roi;
                roi.x = faces[static_cast<int>(t)].x;
                roi.y = faces[static_cast<int>(t)].y;
                roi.width = faces[static_cast<int>(t)].width;
                roi.height = faces[static_cast<int>(t)].height / 2;
    
                Mat faceROI = frame(roi);
                eye_cascader.detectMultiScale(faceROI, eyes, 1.2, 3, 0, Size(20, 20));
                for (size_t k = 0; k < eyes.size(); k++) {
                    Rect rect;
                    rect.x = faces[static_cast<int>(t)].x + eyes[k].x;
                    rect.y = faces[static_cast<int>(t)].y + eyes[k].y;
                    rect.width = eyes[k].width;
                    rect.height = eyes[k].height;
                    rectangle(frame, rect, Scalar(0, 255, 0), 2, 8, 0);
                }
                rectangle(frame, faces[static_cast<int>(t)], Scalar(0, 0, 255), 2, 8, 0);
            }
            imshow("camera-demo", frame);
            char c = waitKey(30);
            if (c == 27) {
                break;
            }
        }
        waitKey(0);
        return 0;
    }
  • 相关阅读:
    CH02 FPGA设计Verilog基础笔记(二)
    同一个按键短按与长按的区别触发
    树莓派 -- 输入设备驱动 (key) 续2: 转载 Setting up a GPIO-Button “keyboard” on a Raspberry Pi
    树莓派 -- 输入设备驱动 (key) 续1
    树莓派 -- 输入设备驱动 (key)
    树莓派 -- 按键 (key)使用BCM2835 gpio library
    leds-gpio driver 续1
    leds-gpio driver
    使用CSDN-markdown编辑器
    树莓派
  • 原文地址:https://www.cnblogs.com/osbreak/p/11699310.html
Copyright © 2011-2022 走看看