资源简介
c++版本的opencv开发案例14个中的第11个案例:人脸检测与识别系统的实现
代码片段和文件信息
#include
#include
#include
#include
#include
#include “facedetect-dll.h“
#pragma comment(lib“libfacedetect.lib“)
#pragma comment( linker “/subsystem:\“windows\“ /entry:\“mainCRTStartup\““ )//不显示控制台
using namespace cv;
using namespace std;
//函数声明
int detectAndDisplay(Mat frame);
extern bool stop = false;//设置全局变量
extern string mode = “manual“;
extern unsigned _int64 time = 1000;
static void help()
{
cout <<
“\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n“
“\n@This program shows image from camera.\n“
“\n@And Detect Face!!!\n“
“\n@Version:1.15.11.0\n“
“\n@Call:./detectface.exe /auto 1000\n“
“\n@Call:./detectface.exe /manual 5000\n“
“\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n“<< endl;
}
int main(int argc char** argv )
{
help();
//打开摄像头设备
VideoCapture cap(0);
if(!cap.isOpened())
{
cout<<“---Device Can Not Open---Break“;
waitKey(1000);
return 1;
}
Mat frame;
if(argc > 1 )
{
mode = argv[1];
}
if(argc > 2 )
{
mode = argv[1];
time = _strtoui64(argv[2]NULL10);
}
while(!stop)
{
//查看图像是否被抓取到,抓取到就调用检测face并显示,未检测到报错,任意键退出。
cap>>frame;
if(!frame.empty())
{
detectAndDisplay(frame);
}
else
{
cout<<“---No Capture frame---Break“;
waitKey(1000);
return 2;
}
if(waitKey(20) > 0) //设置帧率50Hz
{
cout<<“This is FR/HZ“;
}
}
return 0;
}
int detectAndDisplay(Mat frame)
{
Mat edges;
Mat gray;
//GaussianBlur(edgesedgesSize(77)1.51.5);//高斯滤波
//Canny(edgesedges0303);//边缘检测
flip(frameedges1);
//每一帧转化为灰度
cvtColor(edgesgrayCV_BGR2GRAY); //将frame图像由BGR转化为GRAY的目标图像edges
if(gray.empty())
{
fprintf(stderr “Can not load the image file.\n“);
cin.get();
return 2;
}
int *pResults = NULL;
///////////////////////////////////////////
// 多角度人脸检测 facedetect_multiview()
// 可以检测部分脸部,但比正面脸部检测要慢,正面函数为facedetect_frontal()
//////////////////////////////////////////
//!!! 输入信号必须为转灰度的图像(单通道信号)
//!!! 不要释放变量pResults !!!
pResults = facedetect_frontal((unsigned char*)(gray.ptr(0)) gray.cols gray.rows gray.step
1.2f 4 24);
printf(“%d faces detected.\n“ (pResults ? *pResults : 0));
//print the detection results
for(int i = 0; i < (pResults ? *pResults : 0); i++)
{
short * p = ((short*)(pResults+1))+6*i;
int x = p[0];
int y = p[1];
int w = p[2];
int h = p[3];
int neighbors = p[4];
int angle = p[5];
//printf(“face_rect=[%d %d %d %d] neighbors=%d angle=%d\n“ xywhneighbors angle);
rectangle(edges cvPoint(xy) cvPoint(x+w y+h) CV_RGB(25500) 2);//画出矩形框
if(neighbors > 5)
{
imshow(“Camera-说明:抓取到人脸后会定格图像数秒,请确认后任意键退出!“edges);
if(mode == “/auto“)
{
stop = true;
}
if(waitKey(time) > 0)
{
cout<<“Detect Face Pass!!!“< stop = true;
}
}
}
imshow(“Camera-说明:抓取到人脸后会定格图像数秒,请确认后任意键退出!“edges);
return -1;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 843824 2006-10-18 21:49 faceidentifysys\cv100.dll
----------- --------- ---------- ----- ----
843824 1
相关资源
- Visual C++视频会议开发技术与源码.ra
- VC数字图像处理杨淑莹北京交通大学
- C++标准库MSDN离线文档-微软2017-10月发
- 数据结构(C++语言版)第三版超清带
- Visual C++范例大全 400+的
- 《Visual C++网络编程开发与实战》案例
- Visual C++网络编程开发与实战 案例源码
- C++ 孔令德计算机图形学习题答案源代
- VC++实现浏览器
- Visual C++ MFC棋牌类游戏编程五子棋,象
- C++TEST中文帮助文档
- C-Free 5.0
- 轻松搞定C++语言.pdf
- c++人脸相似度检测MFC源码
- 精通Visual C++图像处理编程(PDF & 源代
- 《Visual C++ 6.0 用户界面制作技术与应
- 计算机图形学+配书源代码
- C++编程思路2019最新版
- VC++2017 64位
- C++参考大全 第四版 高清扫描版
- 物资管理系统c++和sql
- SGM C++代码 VS2013
- 操作系统概念:进程调度算法FCFS、
- C++Primer及ppt
- vc++ MFC 背单词软件毕业设计系统源代
- msdn for vc++6.0
- GPS单点定位程序C++
- MIF 文件读取,简单的GIS系统,附带
- VC++2010番茄西红柿VAXvirsual assist X完美
- Essential C++ 中文版
评论
共有 条评论