摘要:实现图像中人脸检测,和人眼定位。输出检测标记图像和定位坐标。

工具:vs2015 opencv3  C++

资源:haarcascade_frontalface_alt2.xml;haarcascade_eye_tree_eyeglasses.xml

链接:https://pan.baidu.com/s/1uk8P1TF7XXCoMMd0sNDGVg
提取码:az01

实现结果:

实现过程:

Detect.h

 #pragma once
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#ifndef DETECT_H
#define DETECT_H
int DetectFaceEyes(); //检测人脸定位人眼
#endif // !DETECT_H

Detect.cpp

#include <iostream>
#include "Detect.h" using namespace std;
using namespace cv; int DetectFaceEyes()
{
Mat heying = imread("./Data/heying.jpg");
Mat hyGray = imread("./Data/heying.jpg", );
equalizeHist(hyGray, hyGray); //直方图均匀化 vector<Rect> faces, eyes;
const char *faceCascadeFilename = "./Data/haarcascade_frontalface_alt2.xml";
const char *eyeCascadeFilename = "./Data/haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier faceCascade;
CascadeClassifier eyeCascade;
if (!faceCascade.load(faceCascadeFilename))
{
cout << "人脸检测级联分类器没找到!!" << endl;
return -;
}
if (!eyeCascade.load(eyeCascadeFilename))
{
cout << "眼睛检测级联分类器没找到!!" << endl;
return -;
}
faceCascade.detectMultiScale(hyGray, faces, 1.2, , , Size(, ));
for (auto b : faces)
{
cout << "输出人脸位置:(x,y):" << "(" << b.x << "," << b.y << "),\
(width,heigh):(" << b.width << "," << b.height << ")\n";
}
if (faces.size() > )
{
for (size_t i = ; i < faces.size(); i++)
{
// putText(heying,"xxx", cvPoint(faces[i].x, faces[i].y - 10), FONT_HERSHEY_PLAIN, 2.0, Scalar(0, 0, 255));
rectangle(heying, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(, , ), , );
cout << faces[i] << endl; Mat face_ = hyGray(faces[i]); // 选定人脸的基础上定位眼睛
eyeCascade.detectMultiScale(face_, eyes, 1.2, , , Size(, ));
for (size_t j = ; j < eyes.size(); j++)
{
// 在原图上标注眼睛,需要人脸在原图上的坐标
Point eyeCenter(faces[i].x + eyes[j].x + eyes[j].width / , faces[i].y + eyes[j].y + eyes[j].height / );
int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
circle(heying, eyeCenter, radius, Scalar(, , ), , , );
}
}
}
imshow("result", heying);
waitKey();
return ;
}

测试:Main.cpp

#include <iostream>
#include <opencv2\opencv.hpp>
#include "Detect.h" using namespace cv; int main()
{
int isFaceDetect; // 测试图片中的人脸
isFaceDetect = DetectFaceEyes();
return ;
}

最新文章

  1. 【python】global
  2. 【BZOJ-4690】Never Wait For Weights 带权并查集
  3. Nginx系列2之Nginx+php
  4. Copy List with Random Pointer [LeetCode]
  5. 【转载】主数据管理(MDM)与元数据管理
  6. ruby 学习 -- Array --2
  7. Redis 管道技术
  8. QPushButton 的checkable 属性
  9. WifiDog and OpenWrt
  10. 【1】python核心编程 第三章
  11. Quiz 6b Question 8————An Introduction to Interactive Programming in Python
  12. RR模式下的事务隔离
  13. innerHTML使用方法
  14. 在.NET Fiddle有趣的沙盒代码
  15. springboot 入门七-静态资源处理
  16. laypage分页控件使用方法
  17. Identity Server 4 - Hybrid Flow - Claims
  18. shell脚本,如果文件中的第一列有相同的,就把相同的那些行的其他字段相加
  19. Spring.net的一些感悟
  20. Django 子程序

热门文章

  1. 调整 全局jvm 大小 tomcat 调整jvm大小
  2. TCP HTTP SOCKET之间的有什么关系
  3. ArcGIS 10.5 tensorflow安装日记
  4. selenium WebDriver 清空input的方式
  5. Java中声明泛型方法
  6. osg #ifdef _WIN32 osg
  7. EasyUI动态展示用户信息
  8. Centos7安装zabbix3.4.0以及配置和使用
  9. SpringBoot集成Spring MVC视图
  10. Docker 部署 ELK 收集 Nginx 日志