zoukankan      html  css  js  c++  java
  • 基于open cv的人脸检测功能 (大自然的搬运工)

    open cv 拍照检测:  https://www.cnblogs.com/yyagrt/p/7260586.html

    配置open cv 环境  : https://blog.csdn.net/qq_41175905/article/details/80560429

    包含目录:
    ***opencvuildinclude;

    ***opencvuildincludeopencv;

    ***opencvuildincludeopencv2;

    库目录:
    ***opencvuildx64vc14lib;

    链接器->输入->附加依赖项:
    opencv_world341d.lib

    出现bored():has been called;         大为内存泄露、指针指向不可预料的内存

     1 #include <opencv2/opencv.hpp>
     2 #include <opencv2/core.hpp>
     3 #include <opencv2//highgui/highgui.hpp>
     4 #include "opencv2/core/cuda.hpp"
     5 #include <string>
     6 #include <opencv2/core/core.hpp>
     7 #include <iostream>
     8 
     9 using namespace cv;
    10 using namespace std;
    11 
    12 string xmlPath = "./haarcascade_frontalface_default.xml";
    13 string path = "./picture.jpg";
    14 
    15 void detectAndDisplay(Mat image);
    16 int main() {
    17     VideoCapture cap;
    18     // 读取摄像头
    19     cap.open(0);
    20     // 判断摄像头是否打开
    21     if (!cap.isOpened()) {
    22         std::cerr << "Could't open capture" << std::endl;
    23         return -1;
    24     }
    25     cv::Mat frame;
    26     //摄像头拍照储存照片的名字
    27     std::string imgName = "picture.jpg";
    28     cap >> frame;
    29     if (frame.empty()) {
    30         return 0;
    31     }
    32     cv::imwrite(imgName, frame);
    33     frame.release();
    34 
    35     //命名一个窗口,path为文件路径
    36     Mat image = imread(path);               
    37 
    38     CascadeClassifier a;     //创建脸部对象
    39     if (!a.load(xmlPath))    
    40     {
    41         cout << "无法加载xml文件" << endl;
    42         return 0;
    43     }
    44     detectAndDisplay(image);// 检测人脸
    45     cvWaitKey(0);  
    46 
    47     return 0;
    48 }
    49 void detectAndDisplay(Mat image)
    50 {
    51     CascadeClassifier ccf;      //创建脸部对象
    52     ccf.load(xmlPath);           //导入opencv自带检测的文件
    53     vector<Rect> faces;
    54     Mat gray;
    55     cvtColor(image, gray, CV_BGR2GRAY);        //图像中不同的色彩空间进行转换
    56     equalizeHist(gray, gray);  //直方图均衡化,用于提高图像的质量
    57 
    58 /*
    59     人脸检测是采用滑动窗口的方式,使一张图片可能出现人脸的地方全部检测到,
    60     
    61     窗口大小存在调整,这样造成多个窗口标记同一张脸情况,为了解决这种问题,又引进比分策略
    62     比分最高的窗口留下,其他舍去。
    63 
    64     为了找到最优解,图片也存在等比例缩放,然后再次进行窗口滑动检测,因此人脸检测是十分消耗资源的工作。
    65 
    66     ccf.detectMultiScale(gray, faces, 1.1, 3, 0, Size(50, 50), Size(500, 500))中
    67     gray    为输入的图片
    68     faces    为检测到的人脸序列
    69     1.1        为每次图像尺寸减小的比例
    70     3        多次检测,检测3次
    71     0        //未知
    72     剩下两个的窗口的最大尺寸与最小尺寸
    73 */
    74     ccf.detectMultiScale(gray, faces, 1.1, 3, 0, Size(50, 50), Size(500, 500));
    75     for (vector<Rect>::const_iterator iter = faces.begin(); iter != faces.end(); iter++)
    76     {
    77         rectangle(image, *iter, Scalar(0, 0, 255), 2, 8); //画出脸部矩形
    78     }
    79 
    80     imshow("1", image);
    81     cvWaitKey(0);
    82 
    83 }
  • 相关阅读:
    Java 最常见的 208 道面试题(第九模块和第十模块答案)
    更灵活的边缘云原生运维:OpenYurt 单元化部署新增 Patch 特性
    高德 Serverless 平台建设及实践
    官宣:恭喜 ChaosBlade 项目进入 CNCF Sandbox
    工商银行分布式服务 C10K 场景解决方案
    云原生的进一步具象化
    阿里云入选 2021 Gartner APM 魔力象限,国内唯一入选云厂商
    云原生下的灰度体系建设
    seata-golang 一周年回顾
    WebAssembly + Dapr = 下一代云原生运行时?
  • 原文地址:https://www.cnblogs.com/q1204675546/p/14495758.html
Copyright © 2011-2022 走看看