Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人眼 c++

Windows环境中配置OpenCV

CascadeClassifier 分类器

CascadeClassifier 是 OpenCV 库中的一个类,它用于实现一种快速的物体检测算法,称为级联分类器。这种分类器通常用于面部识别、行人检测等任务。级联分类器由多个阶段组成,每个阶段都包含一组分类器,通常是基于Haar 特征或 HOG 特征的简单分类器。这些分类器被训练来识别物体的不同特征。

  • 级联分类器的工作原理如下
    • 初始化阶段:使用一个较大的窗口在图像中滑动,寻找可能包含目标物体的区域。
    • 分类器级联:每个阶段的分类器都会对候选区域进行分类,如果候选区域通过当前阶段的分类器,它将被传递到下一个阶段的分类器。如果候选区域被拒绝,它将被排除。
    • 多尺度检测:在不同的缩放级别上重复这个过程,以检测不同大小的目标物体。
    • 非极大值抑制:在所有阶段完成后,可能会有多个重叠的候选区域被检测到。非极大值抑制用于选择最佳的候选区域。
  • 使用CascadeClassifier 的基本步骤包括
    • 加载一个预先训练好的分类器模型,这通常是一个 .xml 文件。
    • 使用分类器检测图像中的物体。
    • 根据需要调整参数,比如窗口大小、缩放因子等。

利用CascadeClassifier 人眼识别

  1. 验证VS2022是否配置好OpenCV环境
    读入一张本地图片,并显示,如下:
cpp 复制代码
#include <opencv2/opencv.hpp>
int main()
{
    Mat img = imread("amy.png");

    namedWindow("美女");

    imshow("美女", img);

    waitKey(0);
    return 0;
}

运行结果如下,显示出图片,则表示VS2022已经配置OpenCV环境。

  1. 进行图片的人眼识别过程
  • imread函数读入一张本地图片;
  • 加载人眼识别分类器CascadeClassifier中人眼模型haarcascade_eye.xml,该分类器一般在OpenCV安装目录opencv//build//etc//haarcascades下;
  • 利用分类器CascadeClassifierdetectMultiScale函数识别人眼;
  • rectangle函数绘制检测到的人眼,标注矩形框,并打印坐标;
  • imshow函数显示识别结果。
  1. 人脸识别c++ demo
cpp 复制代码
#include <opencv2/opencv.hpp>
#include <string>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {

    // 读取图像文件
    Mat image = imread("amy.png");
    if (image.empty()) {
        cout << "读取图像文件失败" << endl;
        return -1;
    }

    // 加载人眼识别分类器
    CascadeClassifier eyeCascade;
    string eyeCascadePath = "C://opencv//build//etc//haarcascades//haarcascade_eye.xml";
    if (!eyeCascade.load(eyeCascadePath)) {
        cout << "加载人眼识别分类器失败" << endl;
        return -1;
    }

    // 识别人眼
    std::vector<Rect> eyes;
    eyeCascade.detectMultiScale(image, eyes, 1.1, 3, 0, Size(80, 80));

    // 绘制检测到的人眼
    for (const Rect& eye : eyes) {
        rectangle(image, eye, Scalar(255, 0, 0), 2);
        
        // 打印人眼的坐标
        cout << "检测到人眼: 坐标 (" << eye.x << ", " << eye.y
            << ") 尺寸 (" << eye.width << "x" << eye.height << ")" << endl;
    }
 
    // 显示结果图像
    imshow("人眼识别结果", image);

    waitKey(0);

    return 0;
}
  • 识别结果:如下图,可以看到可以准确的识别出单张人脸照上的人眼位置,具体坐标如下:

检测到人眼: 坐标 (475, 328) 尺寸 (115x115)

检测到人眼: 坐标 (318, 335) 尺寸 (106x106)

相关推荐
Tech Synapse14 分钟前
电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎
人工智能·python·tensorflow
帅帅的Python15 分钟前
2015-2023 各省 GDP 数据,用QuickBI 进行数据可视化——堆叠图!
大数据·人工智能
weixin_4307509324 分钟前
智能小助手部署 Win10 + ollama的Deepseek + CentOS+ maxKB
linux·人工智能·机器学习·语言模型·自然语言处理·centos
Panesle28 分钟前
大模型微调与蒸馏的差异性与相似性分析
人工智能·微调·蒸馏
多巴胺与内啡肽.28 分钟前
深度学习--循环神经网络RNN
人工智能·rnn·深度学习
子燕若水38 分钟前
解释PyTorch中的广播机制
人工智能·pytorch·python
计算机真好丸39 分钟前
第R4周:LSTM-火灾温度预测
人工智能·rnn·lstm
huangyuchi.39 分钟前
【C++11】Lambda表达式
开发语言·c++·笔记·c++11·lambda·lambda表达式·捕捉列表
数据与人工智能律师43 分钟前
正确应对监管部门的数据安全审查
大数据·网络·数据库·人工智能·区块链
偶尔微微一笑1 小时前
sgpt在kali应用
linux·人工智能·python·自然语言处理