首页 > 其他分享 >3分钟Opencv人脸识别教程-超级简单(30行代码左右)

3分钟Opencv人脸识别教程-超级简单(30行代码左右)

时间:2024-11-07 21:44:29浏览次数:3  
标签:casca 人脸识别 opencv 检测 30 Opencv 人脸 faces include

一、下载Opencv源码并使用CMake构建工具编译源码 ?

Opencv源码地址:https://opencv.org/releases/ 

Github的Opencv地址:GitHub - opencv/opencv: Open Source Computer Vision Library

1、本文用到的所有文件包括opencv编译好的源码

https://pan.baidu.com/s/1ZINU8pbva1vur5GhKtu9Aw?pwd=d6u5

通过网盘分享的文件:opencv.zip等3个文件
链接: 提取码: d6u5

2、工具  Visual Studio 2022 

1)、第一步 点开项目 点击最底下属性

2)、点开VC++目录

 设置下载好的opencv路径,如下:

 3)、VC++目录下,添加库目录

 

4)、向下找到链接器,点开输入,里面有个附加依赖项

写入"opencv_world480d.lib",版本不同参考这个模板opencv_worldxxxd.lib

5)、添加系统环境变量

添加用户或者系统path下添加bin,这步结束后记得重启电脑让环境变量生效,否则会找不到

 
3、图片面部检测代码
#include <opencv2/imgcodecs.hpp> // 用于图像读取和写入
#include <opencv2/highgui.hpp>   // 用于图像显示窗口和用户交互
#include <opencv2/imgproc.hpp>   // 用于图像处理
#include <opencv2/objdetect.hpp> // 用于对象检测,例如人脸检测
#include <iostream>              // 用于标准输入输出
#include <vector>                // 用于存储检测结果的矩形容器
using namespace cv;              // 简化OpenCV命名空间引用
using namespace std;             // 简化标准命名空间引用

   面部检测   //

int main()
{
    // 指定要加载的图像路径
    // # Resources是本项目下的一个文件夹,可执行创建,或者指定绝对路径
    string imgpath = "Resources/face.png";

    // 读取图像文件并存储到Mat对象中
    Mat img = imread(imgpath);

    // 创建级联分类器对象
    CascadeClassifier casca;

    // 加载用于人脸检测的XML文件(级联分类器)
    casca.load("Resources/haarcascade_frontalface_default.xml");

    // 检查XML文件是否加载成功
    if (casca.empty()) {
        cout << "xml文件不存在" << endl;
        return -1; // 如果加载失败,返回-1以终止程序
    }

    // 定义一个vector来存储检测到的人脸矩形区域
    vector<Rect> faces;

    // 检测人脸并将结果存储到faces向量中
    casca.detectMultiScale(img, faces, 1.1, 10);

    // 遍历检测到的每个面部区域
    for (int i = 0; i < faces.size(); i++) {
        // 绘制矩形框来标记检测到的人脸
        rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255, 0, 255), 3);

        // 打印检测到的人脸的四个角点的坐标,可选
        cout << "-------------------------------------------------" << endl;
        Point topLeft = faces[i].tl(); // 左上角坐标
        Point bottomRight = faces[i].br(); // 右下角坐标
        cout << "脸—> " << i + 1 << ": 顶部坐标 (" << topLeft.x << ", " << topLeft.y << ")"
            << " - 底部坐标 (" << bottomRight.x << ", " << bottomRight.y << ")" << endl;
        cout << "-------------------------------------------------" << endl;
        
    }

    // 在窗口中显示标记后的图像
    imshow("Image", img);

    // 等待按键输入来关闭窗口
    waitKey(0);

    return 0; // 程序执行结束
}
4、视频面部检测代码
#include <opencv2/imgcodecs.hpp> // 用于图像读取和写入
#include <opencv2/highgui.hpp>   // 用于创建图像显示窗口
#include <opencv2/imgproc.hpp>   // 用于图像处理操作
#include <opencv2/objdetect.hpp> // 用于对象检测,例如人脸检测
#include <iostream>              // 用于标准输入输出
#include <vector>                // 用于存储检测结果的矩形区域
using namespace cv;              // 使用OpenCV命名空间
using namespace std;             // 使用标准命名空间

int main()
{
    VideoCapture cap(0); // 打开默认摄像头捕获视频流
    Mat img; // 存储从摄像头读取的每一帧图像

    CascadeClassifier casca; // 创建级联分类器对象
    casca.load("Resources/haarcascade_frontalface_default.xml"); // 加载人脸检测的XML文件
    if (casca.empty()) cout << "xml文件不存在" << endl; // 检查XML文件是否成功加载

    while (1) // 无限循环进行视频帧处理
    {
        cap.read(img); // 读取摄像头的当前帧
        flip(img, img, 1); // 水平翻转图像,使显示效果符合直观预期

        vector<Rect> faces; // 定义向量存储检测到的人脸区域
        casca.detectMultiScale(img, faces, 1.1, 10); // 进行人脸检测

        for (int i = 0; i < faces.size(); i++) // 遍历检测到的所有人脸
        {
            // 在图像上绘制矩形框来标记人脸区域
            rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255, 0, 255), 3);

            // 输出每个人脸的坐标信息,可选
            cout << "-------------------------------------------------" << endl;
            Point topLeft = faces[i].tl(); // 左上角坐标
            Point bottomRight = faces[i].br(); // 右下角坐标
            cout << "脸—> " << i + 1 << ": 顶部坐标 (" << topLeft.x << ", " << topLeft.y << ")"
                 << " - 底部坐标 (" << bottomRight.x << ", " << bottomRight.y << ")" << endl;
            cout << "-------------------------------------------------" << endl;
        }

        imshow("Image", img); // 显示处理后的图像
        waitKey(1); // 等待1毫秒,刷新显示窗口,确保视频连续播放
    }
    return 0; // 结束程序
}
5、演示一下图片脸部检测

 

 二、总结

没有总结,玩得开心

标签:casca,人脸识别,opencv,检测,30,Opencv,人脸,faces,include
From: https://blog.csdn.net/m0_73570600/article/details/143607862

相关文章