基于OpenCV harr级联分类器的人脸及眼睛、鼻子、嘴巴检测程序
来源:互联网 发布:linux 守护进程死掉 编辑:程序博客网 时间:2024/05/01 08:49
#include <opencv2/core/core.hpp>#include <opencv2/highgui//highgui.hpp>#include <opencv2/objdetect/objdetect.hpp>#include <string>#include <vector>using namespace std;int main() { cv::CascadeClassifier mFaceDetector; cv::CascadeClassifier mEyeDetector; cv::CascadeClassifier mMouthDetector; cv::CascadeClassifier mNoseDetector; //载入四个人脸特征分类器文件,可以从opencv的安装目录中找到 if( mFaceDetector.empty() ) mFaceDetector.load( "haarcascade_frontalface_default.xml" ); if( mEyeDetector.empty() ) mEyeDetector.load( "haarcascade_mcs_eyepair_big.xml" ); if( mNoseDetector.empty() ) mNoseDetector.load("haarcascade_mcs_nose.xml" ); if( mMouthDetector.empty() ) mMouthDetector.load( "haarcascade_mcs_mouth.xml" ); //打开视频文件 //cv::VideoCapture capture("bike.avi"); //0 open default camera cv::VideoCapture capture(0); //检查视频是否打开 if(!capture.isOpened()) return 1; // 得到帧率 double rate= capture.get(CV_CAP_PROP_FPS); bool stop(false); cv::Mat frame; // 现在的视频帧 cv::Mat mElabImage;//备份frame图像 cv::namedWindow("Extracted Frame"); // 两帧之间的间隔时间 int delay= 1000/rate; // 循环播放所有的帧 while (!stop) { // 读下一帧 if (!capture.read(frame)) break; frame.copyTo( mElabImage ); //检测脸 //缩放因子 float scaleFactor = 3.0f; vector< cv::Rect > faceVec; mFaceDetector.detectMultiScale( frame, faceVec, scaleFactor ); int i, j; for( i=0; i<faceVec.size(); i++ ) { cv::rectangle( mElabImage, faceVec[i], CV_RGB(255,0,0), 2 ); cv::Mat face = frame( faceVec[i] ); //检测眼睛 vector< cv::Rect > eyeVec; mEyeDetector.detectMultiScale( face, eyeVec ); for( j=0; j<eyeVec.size(); j++ ) { cv::Rect rect = eyeVec[j]; rect.x += faceVec[i].x; rect.y += faceVec[i].y; cv::rectangle( mElabImage, rect, CV_RGB(0,255,0), 2 ); } //检测鼻子 vector< cv::Rect > noseVec; mNoseDetector.detectMultiScale( face, noseVec, 3 ); for( j=0; j<noseVec.size(); j++ ) { cv::Rect rect = noseVec[j]; rect.x += faceVec[i].x; rect.y += faceVec[i].y; cv::rectangle( mElabImage, rect, CV_RGB(0,0,255), 2 ); } //检测嘴巴 vector< cv::Rect > mouthVec; cv::Rect halfRect = faceVec[i]; halfRect.height /= 2; halfRect.y += halfRect.height; cv::Mat halfFace = frame( halfRect ); mMouthDetector.detectMultiScale( halfFace, mouthVec, 3 ); for( j=0; j<mouthVec.size(); j++ ) { cv::Rect rect = mouthVec[j]; rect.x += halfRect.x; rect.y += halfRect.y; cv::rectangle( mElabImage, rect, CV_RGB(255,255,255), 2 ); } } //在窗口中显示图像 cv::imshow("Extracted Frame",mElabImage); // 按任意键停止视频播放 //if (cv::waitKey(delay)>=0) // stop= true; cv::waitKey(20); } // 关闭视频文件 capture.release(); return 0; }
- 基于OpenCV harr级联分类器的人脸及眼睛、鼻子、嘴巴检测程序
- 能检测出鼻子,眼睛,嘴巴的opencv程序
- opencv 人脸识别 眼睛识别 鼻子嘴巴等等的分类器haarcascade
- 使用Harr级联分类器检测人脸(包括眼睛)
- 【OpenCV】检测人脸、眼睛、鼻子、耳朵、嘴
- OpenCV基础人脸检测(Harr级联实现)
- opencv 2.4.9+vs2013 人脸识别环境搭建,眼睛,鼻子,嘴巴等 摄像头读取和显示
- 人脸检测/Harr分类器
- Learning opencv中的一个基于级联的Hear分类器的人脸检测
- OpenCV中基于Haar特征和级联分类器的人脸检测
- 基于harr的人脸检测
- 利用opencv库函数检测人脸、眼睛以及鼻子等区域
- 使用haar算子的 人脸检测,眼睛检测,鼻子检测 专题
- 【转】openCV中训练好的级联Harr特征分类器参数含义
- 基于级联分类器的多目标检测
- 基于级联分类器的多目标检测
- OpenCV学习笔记:人脸检测(级联分类器)
- Opencv使用级联分类器进行人脸检测
- 无线路由:关于WDS,Repeater等模式的说明(转)
- VIM笔记
- 网游服务端开发入门知识
- 过得并不快乐。谁知道呢?心情日志
- vi编辑器及GCC编译器的使用
- 基于OpenCV harr级联分类器的人脸及眼睛、鼻子、嘴巴检测程序
- 表空间加密
- #ifdef __cplusplus 倒底是什么意思?
- 伤感日志分享:逆夏,铅笔记忆
- OpenCV中读取视频/camera代码
- 又回到csdn
- const函数 和非const函数
- 计算利息
- 控制控制台窗口的关闭