OpenCV学习笔记(一):使用CascadeClassifier检测人脸
2016-10-06 16:59
656 查看
内容说明
直接参考了OpenCV 3.0的示例程序,程序为opencv\sources\samples\cpp\tutorial_code\objectDetection目录下的objectDetection.cpp文件。本文使用了C++类进行封装实验结果
原始图像与识别结果:程序代码
1、 OpenCVTest.cpp
#include "stdafx.h" #include "FaceRecognition.hpp" int _tmain(int argc, _TCHAR* argv[]) { char* path = "C:\\Users\\dhj555\\Desktop\\22.jpg"; cv::Mat img = cv::imread(path); FaceRecognition* recog = new FaceRecognition(); recog->setImg(img); recog->recognition(); cvWaitKey(); return 0; }
2、FaceRecognition.hpp
#include "stdafx.h" #include <opencv2/opencv.hpp> class FaceRecognition { private: cv::Mat m_mImg; char* face_cascade_name = "D:\\OpenCV\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"; char* eyes_cascade_name = "D:\\OpenCV\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml"; cv::CascadeClassifier face_cascade; cv::CascadeClassifier eyes_cascade; public: FaceRecognition(); ~FaceRecognition(); void recognition(); void setImg(cv::Mat mat); }; FaceRecognition::FaceRecognition(){} FaceRecognition::~FaceRecognition() { delete face_cascade_name; delete eyes_cascade_name; } void FaceRecognition::setImg(cv::Mat mat) { this->m_mImg = mat; } void FaceRecognition::recognition() { //-- 1. Load the cascades if (!face_cascade.load(face_cascade_name)){ printf("--(!)Error loading face cascade\n"); return ; }; if (!eyes_cascade.load(eyes_cascade_name)){ printf("--(!)Error loading eyes cascade\n"); return ; }; std::vector<cv::Rect> faces; cv::Mat img_gray; cvtColor(m_mImg, img_gray, cv::COLOR_BGR2GRAY); cv::equalizeHist(img_gray, img_gray); //-- 2. Detect faces face_cascade.detectMultiScale(img_gray, faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); for (int i = 0; i < faces.size(); i++) { cv::Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2); ellipse(m_mImg, center, cv::Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, cv::Scalar(255, 0, 255), 4, 8, 0); cv::Mat faceROI = img_gray(faces[i]); std::vector<cv::Rect> eyes; //-- In each face, detect eyes eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); for (size_t j = 0; j < eyes.size(); j++) { cv::Point eye_center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2); int radius = cvRound((eyes[j].width + eyes[j].height)*0.25); circle(m_mImg, eye_center, radius, cv::Scalar(255, 0, 0), 4, 8, 0); } } //-- 3. Show result cv::imshow("Res", m_mImg); }
相关文章推荐
- 基于OpenCv的人脸检测、识别系统学习制作笔记之三
- OpenCV学习笔记(三)人脸检测的代码分析
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- (学习笔记二)——基于opencv人脸检测原理及实现
- OpenCV学习笔记(三)人脸检测的代码分析(1)
- (学习笔记二)——基于opencv人脸检测原理及实现
- OpenCV学习笔记:人脸检测(级联分类器)
- OpenCV2学习笔记(七):使用Canny算子检测轮廓
- 我的OpenCV学习笔记(18):使用Sobel变化和拉普拉斯变换检测图像边沿
- OpenCV学习笔记(三)人脸检测的代码分析
- Opencv2系列学习笔记9(使用Canny算子检测轮廓)
- OPENCV人脸检测学习笔记【入门级别】
- OpenCV 2 学习笔记(24): 使用形态学滤波检测边缘与角点
- OpenCV学习笔记(三)人脸检测的代码分析(2)
- 基础学习笔记之opencv(17):皮肤检测类CvAdaptiveSkinDetector的使用
- OpenCV学习笔记:基于Haar特征的人脸检测
- OpenCV学习笔记2:使用opencv进行图像比较
- OpenCv学习笔记(八):角点检测
- OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect
- linux下qtreator使用opencv-学习笔记