【OpenCV3】级联分类器目标检测——cv::CascadeClassifier简介

49 篇文章 32 订阅
38 篇文章 16 订阅

Cascade级联分类器是一种快速简单的分类方法,opencv2和opencv3中提供了完整的cascade分类器的训练和检测方法,本篇主要介绍下级联分类器的检测方法。

opencv中用于级联分类的类是cv::CascadeClassifier,下面以人脸识别为例,简单介绍下这个类的使用方法。


代码如下:


	//定义级联分类器
	cv::CascadeClassifier face_detector;
	//加在分类器
	face_detector.load("haarcascade_frontalface_default.xml");
	//判断分类器是否加载成功
	if (face_detector.empty())
	{
		std::cerr << "load detector failed!!!" << std::endl;
		return;
	}

	//获取训练集的原始尺寸,作为分类器的最小尺寸,这样能得到最佳的检测效果(不是必须的)
	cv::Size original_size = face_detector.getOriginalWindowSize();

	cv::Mat image = cv::imread("image.png", cv::IMREAD_COLOR);

	cv::Mat image_gray;
	cv::cvtColor(image, image_gray, cv::COLOR_BGR2GRAY);
	
	//用于保存检测到的目标窗口
	std::vector<cv::Rect> faces;
	//进行多尺度人脸检测
	face_detector.detectMultiScale(image_gray, faces, 1.1, 3, 0 | cv::CASCADE_SCALE_IMAGE, original_size);

	//将检测到的目标窗口逐个绘制到原图上
	for (size_t i = 0; i < faces.size(); i++)
	{
		cv::rectangle(image, faces[i], cv::Scalar(0, 0, 255), 2, 8, 0);
	}

	cv::imshow("detect result", image);
	cv::waitKey(0);


opencv3安装目录下有个etc文件夹,这个文件夹下有两个文件夹,分别保存了基于haar特征和lbp特征训练得到的多种目标检测的分类器的xml文件,其中就有人脸检测的分类器,可以拿过来直接用。当然我们也可以使用训练集,训练自己的分类器。这里我们就选择一个基于haar特征的人脸分类器来进行测试和说明。

cv::CascadeClassifier通过load()成员函数读取分类器,然后就可以使用detectMultiScale()成员函数进行多尺度的级联分类检测。detectMultiScale()的调用方法如下:

	cv::CascadeClassifier::detectMultiScale(
		const cv::Mat& image, // 输入待检测的图像(灰度)
		vector<cv::Rect>& objects, // 输出的目标窗口
		double scaleFactor = 1.1, // 尺度系数
		int minNeighbors = 3, // 需要的邻域数
		int flags = 0, // flag (旧风格的cascades)
		cv::Size minSize = cv::Size(), // 最小检测窗口
		cv::Size maxSize = cv::Size() // 最大检测窗口
	);


检测结果:



2017.04.12


  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值