opencv识别多张人脸
来源:互联网 发布:淘宝纠纷处理规则 编辑:程序博客网 时间:2024/05/08 14:22
#include "opencv2/objdetect/objdetect.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <cctype>#include <iostream>#include <iterator>#include <stdio.h>using namespace std;using namespace cv;//面部和眼睛检测并绘制矩形框,参数一次为图片数据,面部和眼部的级联分类器,检测时允许的图片缩小比例void detectAndDraw(Mat& img, CascadeClassifier& faceCascade, CascadeClassifier& eyeCascade, double scale);//脸部和眼部的训练数据,就是以xml文件的形式,存储了标准的用来比对的模特数据,文件放在了当前目录string faceCascadeName = "haarcascade_frontalface_alt.xml";//面部string eyeCascadeName = "haarcascade_eye.xml";//眼部int main(int argc, const char** argv){Mat image;//opencv中存储数据的基本单位,存储帧,图片等,代替旧版本的IplImagestring inputName("hjt.jpg");//示例图片,放在当前目录CascadeClassifier faceCascade, eyeCascade;//定义级联分类器,由它们实现检测功能double scale = 1;//不缩小图片,这样可以提高准确率if (!faceCascade.load(faceCascadeName) || !eyeCascade.load(eyeCascadeName))//载入xml训练数据{return -1;}image = imread(inputName, CV_LOAD_IMAGE_COLOR);//读取图片,第二个参数说明是彩色图片cvNamedWindow("result", 1);//创建窗口,命名result,id为1if (!image.empty()){detectAndDraw(image, faceCascade, eyeCascade, scale);//进行识别}waitKey(0);//等待建入cvDestroyWindow("result");//销毁窗口return 0;}void detectAndDraw(Mat& img, CascadeClassifier& faceCascade,CascadeClassifier& eyeCascade,double scale){int i = 0;double t = 0;vector<Rect> faces,eyes;//用来存储检测出来的面部和眼部数据,我们无法确定个数,因此定义成vectorMat gray, smallImg(cvRound(img.rows / scale), cvRound(img.cols / scale), CV_8UC1);//smallImg已缩放cvtColor(img, gray, CV_BGR2GRAY);//图片颜色格式转化,CV_BGR2GRAY是从BGR到gray,彩色到灰色resize(gray, smallImg, smallImg.size(), 0, 0, INTER_LINEAR);//将灰色图像适应大小到smallImg中equalizeHist(smallImg, smallImg);//加强对比度,提高检测准确率t = (double)cvGetTickCount();//获取当前时间//使用级联分类器进行识别,参数为灰度图片,面部数组,检测单元的增长率,是否融合检测出的矩形,最小检测单元大小faceCascade.detectMultiScale(smallImg, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));for (vector<Rect>::const_iterator r = faces.begin(); r != faces.end(); r++, i++){cv::rectangle(img, *r, Scalar(0,255,0), 1, 1, 0);//在img上绘制出检测到的面部矩形框,绿色框Mat faceROI = smallImg(*r);//设置图片感兴趣区域,也就是改变了图片原点和长宽,实际像素数据没有丢失eyeCascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));for (vector<Rect>::const_iterator e = eyes.begin(); e != eyes.end(); e++){Rect eyeR;eyeR.x = r->x + e->x;//从感兴趣区域映射到整个图片区域eyeR.y = r->y + e->y;eyeR.height = e->height;eyeR.width = e->width;cv::rectangle(img, eyeR, Scalar(0, 255, 255), 1, 1, 0);//绘制检测到的眼睛矩形框,黄色框}}t = (double)cvGetTickCount() - t;//获取当前时间printf("detection time = %g ms\n", t / ((double)cvGetTickFrequency()*1000.));//转化成毫秒打印cv::imshow("result", img);//将img显示到result窗口}
0 0
- opencv识别多张人脸
- opencv 行人识别
- 车牌识别系统 opencv
- OpenCV人脸识别
- OpenCV 脸部识别 c++
- ios车牌识别opencv
- opencv 火焰识别
- opencv人脸识别
- OpenCV进行OCR识别
- opencv 手势识别
- opencv 颜色识别
- openCV人脸识别
- Opencv 人脸识别
- 基于OpenCV性别识别
- opencv人脸识别
- OpenCV目标识别
- OpenCV颜色识别
- OpenCV颜色识别
- 都市环游
- Mac OS X 10.11.1 安装cocoapods及使用详解
- sqllite (1) - c# .net 使用 sqllite 及版本选择问题
- 快看!RobotArt如何降服四轴机器人?
- sqllite (2) - c# .net 使用 sqllite 增删改查操作数据库
- opencv识别多张人脸
- 启动tomcat时报错:org.springframework.web.context.ContextLoader
- 批量生成文件夹下的图片路径目录--用于批量处理
- 如何让Android应用一直活着,确保占用系统资源。
- angularJs
- 将自己的项目提交到github管理
- linux 端口转发
- C#控制台基础 往hashtable中再次添加已存在的键值对,会出现异常,应用containskeys解决
- CCF-201509-3-生成模板系统