gpt4 book ai didi

OpenCV实现人脸识别简单程序

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章OpenCV实现人脸识别简单程序由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例为大家分享了OpenCV实现人脸识别程序的具体代码,供大家参考,具体内容如下 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/ / Haar特征检测,人脸识别算法,是用xml作为训练后的分类器做的
 
#include<opencv2\opencv.hpp>
#include<cstdio>
#include<cstdlib>
#include<Windows.h>
 
using namespace std;
int main()
{
  / / 加载Haar特征检测分类器
  / / haarcascade_frontalface_alt.xml系OpenCV自带的分类器
  / /
  / / C + + 中用指针还是非常多的,
  / / 记住换行符用法,\后面不要有空格
  const char * pstrCascadeFileName = \
  "D:\\opencv2.4.9\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml" ;
  CvHaarClassifierCascade * pHaarCascade = NULL; / / 定义一个哈尔已有的训练过的结果
  / / 这里的cascade意思是一滴一滴下落 - - - 这是我的英语解词,可以忽略。
  pHaarCascade = (CvHaarClassifierCascade * )cvLoad(pstrCascadeFileName); / / 加载已有的xml文件
 
  / / 载入图像,这里又用到指针了
  const char * pstrImageName = "E:\\testpictures\\meizi.jpg" ;
  IplImage * pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED); / / 不加改变的加载原图。
 
  IplImage * pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1 ); / / 创建八位等大小一通道空图像
  cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY); / / 复制图像
 
  / / 人脸识别与标记
  if (pHaarCascade ! = NULL) / / 如果有xml文件,则往下执行
  {
 
  / / CvScalar:包含四个double成员,可以用来表示B,G,R,alpha - - - - alpha是用来表示图像的透明度
  CvScalar FaceCircleColors[] = / / 这是一些列颜色,可以看作调色板
  {
  { { 0 , 0 , 255 } },
  { { 0 , 128 , 255 } },
  { { 0 , 255 , 255 } },
  { { 0 , 255 , 0 } },
  { { 255 , 128 , 0 } },
  { { 255 , 255 , 0 } },
  { { 255 , 0 , 0 } },
  { { 255 , 0 , 255 } }
  };
  / / 内存存储器是一个可用来存储诸如序列,轮廓,图形, 子划分等动态增长数据结构的底层结构。
  CvMemStorage * pcvMStorage = cvCreateMemStorage( 0 );
  cvClearMemStorage(pcvMStorage); / / 初始化内存
 
  / / 识别
  DWORD dwTimeBegin, dwTimeEnd; / / DWORD 就是 Double Word, 每个word为 2 个字节的长度
 
  / / 在Release版本中,该函数从 0 开始计时,返回自设备启动后的毫秒数(不含系统暂停时间)。
  / / 在Debug版本中,设备启动后便从计时器中减去 180 秒。这样方便测试使用该函数的代码的正确溢出处理。
  dwTimeBegin = GetTickCount();
 
  / / 稠密序列都派生自CvSeq,他们用来代表可扩展的一维数组 — 向量、栈、队列和双端队列。
  / / 稀疏序列派生自CvSet,CvSet也是基于CvSeq的,他们都是由节点所组成,每一个节点要么被占用,那么为空,由标志位flag决定。
  / / 函数 cvHaarDetectObjects 使用针对某目标物体训练的级联分类器在图像中找到包含目标物体的矩形区域,并且将这些区域作为一序列的矩形框返回。
  CvSeq * pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarCascade, pcvMStorage); / / 在这里获得一系列矩形框
  dwTimeEnd = GetTickCount();
 
  printf( "人脸个数: %d 识别用时: %d ms \n" , pcvSeqFaces - >total, dwTimeEnd - dwTimeBegin); / / 计算出时间和包含人脸的矩形框的个数
 
  / / 标记
  for ( int i = 0 ; i < pcvSeqFaces - >total; i + + )
  {
  CvRect * r = (CvRect * )cvGetSeqElem(pcvSeqFaces, i); / / 从矩形框稠密数列中抽取每一个矩形框
  CvPoint center; / / 定义一个中点
  int radius; / / 定义一个半径
  center.x = cvRound((r - >x + r - >width * 0.5 )); / / 获取圆心的中心点x,y坐标
  center.y = cvRound((r - >y + r - >height * 0.5 ));
 
  radius = cvRound((r - >width + r - >height) * 0.25 ); / / 简化计算,本来应该是高的一半平方和宽的一半平方,求根号
  cvCircle(pSrcImage, center, radius, FaceCircleColors[i / 8 ], 2 ); / / 画在图片上画圆圈,涂上颜色,
  }
  cvReleaseMemStorage(&pcvMStorage); / / 释放内存
  }
 
 
  / / 新建窗口显示图像,和销毁窗口。
 
  const char * pstrWindowTitle = "人脸识别" ;
  cvNamedWindow(pstrWindowTitle, CV_WINDOW_AUTOSIZE);
  cvShowImage(pstrWindowTitle, pSrcImage);
  cvWaitKey( 0 );
 
  cvDestroyWindow(pstrWindowTitle);
  cvReleaseImage(&pSrcImage);
  cvReleaseImage(&pGrayImage);
  return 0 ;
 
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://blog.csdn.net/shawncheer/article/details/51097074 。

最后此篇关于OpenCV实现人脸识别简单程序的文章就讲到这里了,如果你想了解更多关于OpenCV实现人脸识别简单程序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com