- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::CascadeClassifier 是 OpenCV 中用于对象检测的一个核心类,特别适用于基于 Haar 特征和 LBP(局部二进制模式)特征的目标检测任务。它实现了 Paul Viola 和 Michael Jones 提出的级联分类器算法,并由 Rainer Lienhart 等人进行了改进。
主要功能
- 加载预训练模型:可以从文件中加载预训练的 Haar 或 LBP 分类器。
- 对象检测:能够在给定图像中检测特定类型的目标(如人脸、行人等)。
- 支持多种特征类型:包括 Haar-like 特征和 LBP 特征。
常用成员函数
- 构造与析构
CascadeClassifier(): 默认构造函数。
~CascadeClassifier(): 析构函数。 - 加载分类器
bool load(const String& filename): 从指定的 XML 或 YAML 文件加载分类器。这是使用预训练模型的第一步。 - 对象检测
void detectMultiScale(InputArray image, CV_OUT std::vector & objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()): 在图像中检测目标对象。主要参数包括:- image: 输入图像。
- objects: 检测到的对象列表,每个对象由一个矩形框表示。
- scaleFactor: 比例因子,用于控制图像金字塔的比例变化。
- minNeighbors: 每个候选矩形应保留的邻居数。该参数会影响结果的质量。
- flags: 参数设置(现在通常不使用,默认为0)。
- minSize: 目标对象的最小尺寸。
- maxSize: 目标对象的最大尺寸。
其他实用方法
- bool empty() const: 判断分类器是否为空。
- void setImage(const Mat& img, int origWinWidth, int origWinHeight): 设置用于检测的图像及原始窗口大小。
- double getFeatureType() const: 获取使用的特征类型(Haar 或 LBP)。
- String getDefaultName() const: 返回对象的默认名称。
示例代码
下面是一个简单的例子,展示如何使用 CascadeClassifier 进行面部检测:
cpp
#include <opencv2/objdetect.hpp>
#include <opencv2/opencv.hpp>
int main()
{
// 创建 CascadeClassifier 对象
cv::CascadeClassifier face_cascade;
// 加载预训练的分类器
if ( !face_cascade.load( "haarcascade_frontalface_default.xml" ) )
{
std::cerr << "Error loading face cascade\n";
return -1;
}
// 读取输入图像
cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/zhou.png" );
if ( img.empty() )
{
std::cerr << "Error loading image\n";
return -1;
}
// 转换为灰度图
cv::Mat gray;
cvtColor( img, gray, cv::COLOR_BGR2GRAY );
// 进行面部检测
std::vector< cv::Rect > faces;
face_cascade.detectMultiScale( gray, faces, 1.1, 3, 0, cv::Size( 30, 30 ) );
// 绘制检测结果
for ( size_t i = 0; i < faces.size(); i++ )
{
cv::rectangle( img, faces[ i ], cv::Scalar( 255, 0, 0 ), 2 );
}
// 显示结果
cv::imshow( "Detected Faces", img );
cv::waitKey();
return 0;
}
运行结果
![](https://i-blog.csdnimg.cn/direct/8ea73a04b8cc4f6fb34619b764991bbf.png)