OpenCV 级联分类器
2024-10-08 19:32:34
#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; /** 函数声明 */
void detectAndDisplay( Mat frame ); /** 全局变量 */
string face_cascade_name = "haarcascade_frontalface_alt.xml";
string eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;
CascadeClassifier eyes_cascade;
string window_name = "Capture - Face detection";
RNG rng(); /** @主函数 */
int main( int argc, const char** argv )
{
CvCapture* capture;
Mat frame; //-- 1. 加载级联分类器文件
if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -; };
if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -; }; //-- 2. 打开内置摄像头视频流
capture = cvCaptureFromCAM( - );
if( capture )
{
while( true )
{
frame = cvQueryFrame( capture ); //-- 3. 对当前帧使用分类器进行检测
if( !frame.empty() )
{ detectAndDisplay( frame ); }
else
{ printf(" --(!) No captured frame -- Break!"); break; } int c = waitKey();
if( (char)c == 'c' ) { break; }
}
}
return ;
} /** @函数 detectAndDisplay */
void detectAndDisplay( Mat frame )
{
std::vector<Rect> faces;
Mat frame_gray; cvtColor( frame, frame_gray, CV_BGR2GRAY );
equalizeHist( frame_gray, frame_gray ); //-- 多尺寸检测人脸
face_cascade.detectMultiScale( frame_gray, faces, 1.1, , |CV_HAAR_SCALE_IMAGE, Size(, ) ); for( int i = ; i < faces.size(); i++ )
{
Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), , , , Scalar( , , ), , , ); Mat faceROI = frame_gray( faces[i] );
std::vector<Rect> eyes; //-- 在每张人脸上检测双眼
eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, , |CV_HAAR_SCALE_IMAGE, Size(, ) ); for( int j = ; j < eyes.size(); j++ )
{
Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
int radius = cvRound( (eyes[j].width + eyes[i].height)*0.25 );
circle( frame, center, radius, Scalar( , , ), , , );
}
}
//-- 显示结果图像
imshow( window_name, frame );
}
最新文章
- WebStorage记录滚动条位置
- python之路3:
- .NET vs2010中使用IrisSkin2.dll轻松实现winForm窗体换肤功能
- Chrome 调试动态加载的js
- freemarker springmvc配置异常
- iOS应用架构谈 组件化方案
- POJ 2674
- 如何让U盘支持大于4G的文件
- 第一次写Makefile文件
- 转:PHP性能优化大全
- zend framework安装中出现的问题与总结
- WPF dataGrid中的check的改变事件
- Laravel 日志查看器 导入log-viewer扩展
- 架构师系列文:通过Spring Cloud组件Hystrix合并请求
- 什么是UDP
- Android总结之json解析(FastJson Gson 对比)[申明:来源于网络]
- 从MFQ方法到需求分析
- Zookeeper环境搭建
- 日期控件——my97
- 第二次sprint
热门文章
- 落地即王道,锁死企业智变CP——云+AI
- Java线程——线程池概念
- Physicoochemical|CG content|
- 洛谷 P2320 [HNOI2006]鬼谷子的钱袋
- Bug(1)
- Eclipse Springboot项目Dokcer
- request.getParameter()获取不到数据的问题
- web项目servlet&;jsp包失效问题
- LGOJ3879 TJOI2010 阅读理解
- java时区问题设置,new Date()和系统时间相差8个小时