Opencv之级联分类器(一):进行人脸检测

Opencv之级联分类器(一):进行人脸检测

武汉加油,中国加油

记录学习,交流共进
检测图片放一放:
在这里插入图片描述
因为任务需要,想把传统的识别算法与深度学习的算法进行比较,所以,就拿级联分类器入手咯,来看一看具体的差别。
以前只是听说传统算法精度不高,寻找特征麻烦,亲自动手尝试了一下,哎呀,额的个娘来,喂入相同样本的情况下,两者之间的差别不是一点两点,因为一开始没有用到GPU,所以实时检测的速度还不如深度学习检测的速度,过程中碰到的坑倒不少。
后面发现其实官方也提供cuda相关的分类器,换成cuda相关分类器后速度提高了一点点,这个大家可以自行测试一下
级联分类器分两部分来写,这一部分是利用官方已经训练好的模型进行检测,下一部分自己来训练模型进行检测。

人脸检测程序

VS2017+Opencv3.4.1
使用环境大家可以借鉴一下,因为4.0版本下没有训练器,具体的自行测试吧。
官方在opencv中提供了多个已经训练好的分类器,在opencv安装目录下的source/data中,包含人脸、眼睛、微笑、猫脸等多个分类器,这个可自行调用,这里使用最常见的人脸检测,haarcascade_frontalface_alt.xml。我在代码里注释的很清楚了,应该都能看懂,不懂再问,交流共进。
检测图片:

#include <opencv2/core/core.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h> 
using namespace std;
using namespace cv;
//定义分类器
CascadeClassifier face_cascade;
//xml文件存在于opencv/source/data下,尽可能使用绝对路径,相对路径会出错
string facexml = "D:\\opencv3.4.1\\opencv\\sources\\data\\haarcascades_cuda\\haarcascade_frontalface_alt.xml";
//预处理及识别函数
void detectAndDisplay(Mat frame);
//图片的识别
int main(int argc, char** argv) {
   
 //读取图片并判断
 Mat image;
 image = imread("C:\\Users\\14587\\Desktop\\4.jpg", 1);
 if (!image.data) {
   
  printf("can not load image.../n");
  return -1;
 }
 imshow
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值