OpenCV学习14
来源:互联网 发布:如何查找电脑的mac地址 编辑:程序博客网 时间:2024/06/10 23:02
太久没更新了,这次直接出个人脸识别好了,人脸匹配还没做出来,后续跟进
//// main.cpp// FaceTrack//// Created by Sean on 16/3/5.// Copyright © 2016年 Sean. All rights reserved.//#include "objdetect/objdetect.hpp"#include "highgui/highgui.hpp"#include "imgproc/imgproc.hpp"#include "core.hpp"#include "highgui.h"#include "cv.h"#include <iostream>#include <stdio.h>using namespace std;using namespace cv;string face_cascade_name = "/Users/sean/Documents/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt.xml";CascadeClassifier face_cascade;const char name[] = "FaceTrack";typedef string elemtype;typedef struct RStruct{ elemtype sign; CvRect rect; RStruct* next;}RectNode;typedef struct{ IplImage* frame; IplImage* fomer; CvRect box; double similar = 0; bool draw = false;}DrawCount;typedef struct{ IplImage* img; DrawCount Draw_info; RectNode Rect_info; RectNode *head; RectNode *tail;}newdata;void initialNewdata(newdata &data){ RectNode *u = new RectNode; u->sign = "First"; u->next = NULL; data.head = u; data.tail = data.head;}void reinitialNewdata(newdata &data){ data.Draw_info.frame = cvCreateImage(cvGetSize(data.img), data.img->depth, data.img->nChannels); data.Draw_info.fomer = cvCreateImage(cvGetSize(data.img), data.img->depth, data.img->nChannels); cvCopy(data.img, data.Draw_info.frame);}void cvReleaseData(newdata &data){ cvReleaseImage(&data.img); cvReleaseImage(&data.Draw_info.frame); cvReleaseImage(&data.Draw_info.fomer); while(data.tail!=data.head) { RectNode*t = data.head; while(t->next!=data.tail) t=t->next; t->next = data.tail->next; delete data.tail; data.tail = t; }}IplImage* doPyrdown(IplImage* src,int filter = CV_GAUSSIAN_5x5){ assert(src->width%2==0 && src->height%2==0); IplImage* dst = cvCreateImage ( cvGetSize(src), src->depth, src->nChannels ); cvCopy(src, dst); src->width = src->width/2; src->height = src->height/2; cvPyrDown(dst, src); cvReleaseImage(&dst); return src;}int cvGetImage4(IplImage *&src, CvCapture* capture){ if(!(src = cvQueryFrame(capture))) return -1; src = doPyrdown(src); cvFlip(src,src,1); return 0;}void detectAndDisplay(newdata data){ vector<Rect> faces; cvCopy(data.img, data.Draw_info.frame); Mat frame_gray = cvarrToMat(data.Draw_info.frame); cvtColor(frame_gray, frame_gray, CV_BGR2GRAY); equalizeHist(frame_gray, frame_gray); face_cascade.detectMultiScale (frame_gray,faces,1.1,3,0,Size(30, 30)); for( int i = 0; i < faces.size(); i++ ) { data.Draw_info.box = cvRect ( faces[i].x, faces[i].y, faces[i].width, faces[i].height ); // RectNode *pt = new RectNode;// pt->next=NULL;// pt->rect=data.Draw_info.box;// data.tail->next = pt;// data.tail = pt; cvRectangle ( data.Draw_info.frame, cvPoint(data.Draw_info.box.x, data.Draw_info.box.y), cvPoint ( data.Draw_info.box.x+data.Draw_info.box.width, data.Draw_info.box.y+data.Draw_info.box.height ), cvScalar(255,0,0), 4 ); } cvShowImage(name, data.Draw_info.frame);}int main( int argc, char** argv ){ newdata data; initialNewdata(data); CvCapture *capture = cvCreateCameraCapture(0); cvGetImage4(data.img, capture); reinitialNewdata(data); if(!data.img) return -1; if(!face_cascade.load(face_cascade_name)) return -2; while(cvWaitKey(24)-27) { cvGetImage4(data.img, capture); if(data.img) detectAndDisplay(data); } cvReleaseCapture(&capture); cvReleaseImage(&data.img); cvReleaseImage(&data.Draw_info.frame); cvReleaseImage(&data.Draw_info.fomer); cvDestroyAllWindows();}
0 0
- OpenCV学习14
- [OpenCV]Opencv学习日记
- opencv学习
- opencv学习
- opencv学习
- opencv学习
- opencv学习
- OpenCV学习
- 学习OpenCV
- 学习opencv
- 学习OPENCV
- opencv学习
- 学习opencv
- opencv学习
- OpenCV学习
- 学习opencv
- 学习opencv
- opencv 学习
- C语言输入函数与缓冲区
- 第四周上机实践项目——项目1-求最大公约数
- SSDC_携程下一代无线app架构
- Spring Tool Suite下载与安装
- C++面试题1
- OpenCV学习14
- SSDC_新型架构案例与实践
- SSDC_从概率统计方向来做系统稳定性
- C#---抽象类与接口
- C++面试题2
- 二叉树:层次遍历和应用
- Shell 排序
- SSDC_高可用系统在点评的实践与经验
- 《三种继承方式详解》