code:

#include <opencv\cv.h>
#include <opencv\highgui.h>
#include <opencv\cxcore.h>
#include <stdio.h> #include <fstream>
#include <string>
#include <opencv\ml.h>
#include <iostream>
#include <fstream>
#include <string>
#include <vector> #include <iostream>
#include <string.h>
#include <ctype.h> using namespace cv;
using namespace std; void detectAndDraw( Mat& img,
CascadeClassifier& cascade, CascadeClassifier& nestedCascade,
double scale);
String cascadeName =
"D:\\Opencv\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml";
String nestedCascadeName =
"D:\\Opencv\\opencv\\data\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml"; int main()
{ IplImage* aplace = 0;
IplImage* colorlaplace = 0; IplImage* planes[3] = {0,0,0};
CvCapture* capture = 0;
Mat frame, frameCopy, image;
double scale = 1;
CascadeClassifier cascade, nestedCascade;
capture = cvCaptureFromCAM(0); if(!cascade.load(cascadeName))
{
cout<<"Load 1 is false!"<<endl;
}
//if(!nestedCascade.load(nestedCascadeName))
//{
// cout<<"Load 2 is false!"<<endl;
//} cvNamedWindow("Example",0);
for(;;)
{
IplImage* frame0 = 0;
int i; frame0 = cvQueryFrame(capture);
frame = frame0;
if(!frame0)
{
break;
}
if( frame0->origin == IPL_ORIGIN_TL )
frame.copyTo( frameCopy );
else
flip( frame, frameCopy, 0 ); detectAndDraw( frameCopy, cascade, nestedCascade, scale );
//cvShowImage("Example",frame);
cvWaitKey(1);
}
cvReleaseCapture(&capture);
cvDestroyWindow("Example");
return 0;
}
void detectAndDraw( Mat& img,
CascadeClassifier& cascade, CascadeClassifier& nestedCascade,
double scale)
{
int i = 0;
double t = 0;
vector<Rect> faces;
const static Scalar colors[] = { CV_RGB(0,0,255),
CV_RGB(0,128,255),
CV_RGB(0,255,255),
CV_RGB(0,255,0),
CV_RGB(255,128,0),
CV_RGB(255,255,0),
CV_RGB(255,0,0),
CV_RGB(255,0,255)} ;
Mat gray, smallImg( cvRound (img.rows/scale), cvRound(img.cols/scale), CV_8UC1 );
cvtColor( img, gray, CV_BGR2GRAY );
resize( gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR );
equalizeHist( smallImg, smallImg );
t = (double)cvGetTickCount();
cascade.detectMultiScale( smallImg, faces,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
|CV_HAAR_SCALE_IMAGE
,
Size(30, 30) );
t = (double)cvGetTickCount() - t;
printf( "detection time = %g ms\n", t/((double)cvGetTickFrequency()*1000.) );
for( vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++ )
{
Mat smallImgROI;
vector<Rect> nestedObjects;
Point center;
// Scalar color = colors[i%8];
Scalar color = colors[3];
int radius;
center.x = cvRound((r->x + r->width*0.5)*scale);
center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
circle( img, center, radius, color, 3, 8, 0 );
if( nestedCascade.empty() )
continue;
smallImgROI = smallImg(*r);
nestedCascade.detectMultiScale( smallImgROI, nestedObjects,
1.1, 2, 0
//|CV_HAAR_FIND_BIGGEST_OBJECT
//|CV_HAAR_DO_ROUGH_SEARCH
//|CV_HAAR_DO_CANNY_PRUNING
|CV_HAAR_SCALE_IMAGE
,
Size(30, 30) );
for( vector<Rect>::const_iterator nr = nestedObjects.begin(); nr != nestedObjects.end(); nr++ )
{
center.x = cvRound((r->x + nr->x + nr->width*0.5)*scale);
center.y = cvRound((r->y + nr->y + nr->height*0.5)*scale);
radius = cvRound((nr->width + nr->height)*0.25*scale);
circle( img, center, radius, color, 3, 8, 0 );
}
}
cv::imshow( "Example", img );
}

最新文章

  1. SQL面试笔试经典题(Part 2)
  2. [RESTful]HTTP状态码
  3. spring aop配置出错
  4. java_method_stringUtils
  5. JSP开发环境配置问题解答
  6. [BZOJ2683][BZOJ4066]简单题
  7. CSS中position属性 (absolute,relative,static,fixed)
  8. 关于python的面向对象编程
  9. jmp指令
  10. 不定义JQuery插件,不要说会JQuery[转载]
  11. Java Me-List控件的用法案例
  12. python no module named _socket 原因
  13. iOS 高德自定义坐标轨迹绘制动画 类似与Keep的轨迹绘制
  14. μC/OS-II 任务的同步与通信 --- 消息邮箱
  15. Python 执行 mysql 存储过程
  16. 2018-10-19 Chrome插件实现GitHub代码离线翻译v0.0.4
  17. php使用CURL不依赖COOKIEJAR获取COOKIE的方法
  18. tesseract .net 中使用历程
  19. jq闭包
  20. Python: 分数运算

热门文章

  1. Servlet课程0426(十)Servlet如何删除cookie
  2. C#字符串的常用操作
  3. JBoss7 局域网无法访问 解决方法
  4. redolog 大小的实验
  5. 【HDOJ】4579 Random Walk
  6. bzoj题解
  7. unity3d游戏物体跟着鼠标方向移动
  8. echarts 问题2
  9. Java集群优化——dubbo+zookeeper构建高可用分布式集群
  10. SPOJ 962 Intergalactic Map (从A到B再到C的路线)