【MFC基础入门】OpenCV人脸检测与马赛克
来源:互联网 发布:实况8球员隐藏数据 编辑:程序博客网 时间:2024/05/01 22:52
这是OpenCV的代码,在这基础上加了马赛克。
void CFaceDetectionDlg::detect_and_draw( IplImage* img ) { //static CvScalar colors[] = //{ //{{0,0,255}}, //{{0,128,255}}, //{{0,255,255}}, //{{0,255,0}}, //{{255,128,0}}, //{{255,255,0}}, //{{255,0,0}}, //{{255,0,255}} //}; //用不同颜色的圈圈区分不同的人double scale = 1.3;//先缩小为small_img 后放大,为了便于处理也可以不用 IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 ); IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale), cvRound (img->height/scale)), 8, 1 ); int i; cvCvtColor( img, gray, CV_BGR2GRAY );//灰度图cvResize( gray, small_img, CV_INTER_LINEAR );//缩小cvEqualizeHist( small_img, small_img );//经过上面两步,gray指向的图像已经变为small_imgcvClearMemStorage( storage );//动态内存重置if( cascade )//括号里是分类器的指针,就是用这个东西来判断是不是人脸的!!!{double t = (double)cvGetTickCount();//开始计时CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,cvSize(30, 30) );//检测的核心语句,注意cascade参数t = (double)cvGetTickCount() - t;//计算时间间隔//cout<<"detection time = %gms\n"<<t/((double)cvGetTickFrequency()*1000.)<<endl;//打印出所用的时间for( i = 0; i < (faces ? faces->total : 0); i++ )//总共有faces->total 个脸,把他们一个一个圈出来{CvRect* r = (CvRect*)cvGetSeqElem( faces, i );//每个脸对应的链表节点CvPoint center;int radius;center.x = cvRound((r->x + r->width*0.5)*scale);//圆心横坐标,注意scale,这里放大center.y = cvRound((r->y + r->height*0.5)*scale);//纵坐标radius = cvRound((r->width + r->height)*0.25*scale);//半径//cvCircle( img, center, radius, colors[i%8], -1, 8, 0 );//画圆圈出目标头像//马赛克cvSetImageROI(img,cvRect(center.x-radius,center.y-radius,radius*2,radius*2));int W=8;int H=8;for(int mi=W;mi<img->roi->width;mi+=W)for(int mj=H;mj<img->roi->height;mj+=H){CvScalar tmp=cvGet2D(img,mj-H/2,mi-W/2);for(int mx=mi-W;mx<=mi;mx++)for(int my=mj-H;my<=mj;my++)cvSet2D(img,my,mx,tmp);}cvResetImageROI(img); }}cvReleaseImage( &gray ); cvReleaseImage( &small_img ); }
本人写的通用小项目下载地址:可以提取分类器进行检测,大家必须配置好OpenCV环境和在源码中设置好分类器的路径。
http://download.csdn.net/detail/mkr127/5397219
转载请注明出处!
- 【MFC基础入门】OpenCV人脸检测与马赛克
- 【MFC基础入门】基于Adaboost算法的车牌检测在OpenCV上的研究与实现
- OpenCV+MFC人脸检测
- opencv结合MFC进行人脸检测
- 【OpenCV入门指南】人脸检测
- iOS8 Core Image In Swift:人脸检测以及马赛克
- iOS8 Core Image In Swift:人脸检测以及马赛克
- opencv人脸检测基础代码
- openCV|Haar人脸检测与提取
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 【OpenCV入门指南】第七篇 线段检测与圆检测
- 关于大学生自杀的事件——————-我不想表达什么,作为一个人你必须懂的
- Java 编程思想(第4版)学习笔记(迭代器 Iterator ListIterator 第11章练习11)
- VBA中Dictionary对象使用小结
- Java 编程思想(第4版)学习笔记(LinkedList)
- git 忽略某些文件
- 【MFC基础入门】OpenCV人脸检测与马赛克
- java动态代理
- 数据结构算法:中缀表达式转化为后缀表达式
- C#XML文件读写操作
- 如何在.net自定义控件引用外部资源
- 3个学生各学4门课,计算总平均分,并输出第n个学生成绩
- json_decode用法
- ensemble learning
- Visual Studio cannot debug managed applications because a kernel debugger is enabled on the system