• 基于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 }
  • 相关阅读:
    docker PXC MYSQL集群节点启动失败/节点顺序消失/只剩一个节点存在问题的解决
    springgateway
    rabbitMQ重复消费(结合死循环重发那一篇看)
    rabbitMq可靠性投递之手动ACK
    3表查询,1:多:多,根据1查多再查多
    tp后台注册登录配置项
    volist/foreach下,点击循环中的一个进行操作
    生成随机订单号
    省市县的下拉列表
    银行下拉列表
  • 原文地址:https://www.cnblogs.com/q1204675546/p/14495758.html
Copyright © 2020-2023  润新知