图像人脸检测+人眼检测 (opencv + c++)
2024-09-01 14:36:30
摘要:实现图像中人脸检测,和人眼定位。输出检测标记图像和定位坐标。
工具: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 ;
}
最新文章
- 【python】global
- 【BZOJ-4690】Never Wait For Weights 带权并查集
- Nginx系列2之Nginx+php
- Copy List with Random Pointer [LeetCode]
- 【转载】主数据管理(MDM)与元数据管理
- ruby 学习 -- Array --2
- Redis 管道技术
- QPushButton 的checkable 属性
- WifiDog and OpenWrt
- 【1】python核心编程 第三章
- Quiz 6b Question 8————An Introduction to Interactive Programming in Python
- RR模式下的事务隔离
- innerHTML使用方法
- 在.NET Fiddle有趣的沙盒代码
- springboot 入门七-静态资源处理
- laypage分页控件使用方法
- Identity Server 4 - Hybrid Flow - Claims
- shell脚本,如果文件中的第一列有相同的,就把相同的那些行的其他字段相加
- Spring.net的一些感悟
- Django 子程序