图像人脸检测+人眼检测 (opencv + c++)

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

工具:vs2015 opencv3  C++

资源:haarcascade_frontalface_alt2.xml;haarcascade_eye_tree_eyeglasses.xml

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

实现结果:

实现过程:

Detect.h

 1 #pragma once
 2 #include <opencv2/opencv.hpp>
 3 #include <opencv2/highgui/highgui.hpp>
 4 #include <opencv2/core/core.hpp>
 5 #include <opencv2/imgproc/imgproc.hpp>
 6 #ifndef DETECT_H
 7 #define DETECT_H
 8 int DetectFaceEyes();    //检测人脸定位人眼
 9 #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", 0);
    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 -1;
    }
    if (!eyeCascade.load(eyeCascadeFilename))
    {
        cout << "眼睛检测级联分类器没找到!!" << endl;
        return -1;
    }
    faceCascade.detectMultiScale(hyGray, faces, 1.2, 5, 0, Size(30, 30));
    for (auto b : faces)
    {
        cout << "输出人脸位置:(x,y):" << "(" << b.x << "," << b.y << "),\
            (width,heigh):(" << b.width << "," << b.height << ")\n";
    }
    if (faces.size() > 0)
    {
        for (size_t i = 0; 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(0, 0, 255), 1, 8);
            cout << faces[i] << endl;

            Mat face_ = hyGray(faces[i]);    // 选定人脸的基础上定位眼睛
            eyeCascade.detectMultiScale(face_, eyes, 1.2, 2, 0, Size(30, 30));
            for (size_t j = 0; j < eyes.size(); j++)
            {
                // 在原图上标注眼睛,需要人脸在原图上的坐标
                Point eyeCenter(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
                int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
                circle(heying, eyeCenter, radius, Scalar(65, 105, 255), 4, 8, 0);
            }
        }
    }
    imshow("result", heying);
    waitKey(5000);
    return 0;
}

测试:Main.cpp

#include <iostream>
#include <opencv2\opencv.hpp>
#include "Detect.h"

using namespace cv;

int main()
{
    int isFaceDetect;

    // 测试图片中的人脸
    isFaceDetect = DetectFaceEyes();
    return 0;
}

原文地址:https://www.cnblogs.com/philothypeipei/p/12070544.html

时间: 2024-08-01 16:54:14

图像人脸检测+人眼检测 (opencv + c++)的相关文章

opencv2实现人脸及人眼检测_相当稳定

//opencv2检测人脸人眼的方法有很多,我试了集中,下面的程序得到的结果最准确.人可以随意动,只要摄像头可以,就没有问题. [cpp] view plaincopyprint? /* */ #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #includ

opencv实现人脸,人眼,微笑检测

1.首先实现人脸检测 1 import cv2 2 3 img = cv2.imread("people.jpg",1) #读入图像 4 #导入人脸级联分类器引擎,“.xml”文件里包含了训练出来的人脸特征 5 face_engine = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml') 6 #用人脸级联分类器引擎进行人脸识别,返回的faces为人脸的坐标列表 7 #sc

一文带你学会使用YOLO及Opencv完成图像及视频流目标检测(上)|附源码

计算机视觉领域中,目标检测一直是工业应用上比较热门且成熟的应用领域,比如人脸识别.行人检测等,国内的旷视科技.商汤科技等公司在该领域占据行业领先地位.相对于图像分类任务而言,目标检测会更加复杂一些,不仅需要知道这是哪一类图像,而且要知道图像中所包含的内容有什么及其在图像中的位置,因此,其工业应用比较广泛.那么,今天将向读者介绍该领域中表现优异的一种算算法--"你只需要看一次"(you only look once,yolo),提出该算法的作者风趣幽默可爱,其个人主页及论文风格显示了其性

图像人脸检测(框出人脸、笑脸、眼睛)

1 # 通过图片识别人脸 2 3 #1.概述: 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别.面部识别. 4 5 # 2.人脸识别步骤 6 # 1 人脸图像采集及检测 7 # 2 人脸图像预处理 8 # 3 人脸图像特征提取以及匹配与识别 9 10 # 3. 人脸识别的方法 11 # 在OpenCV中主要使用了两种特征(即两种方法)进行人脸检

OpenCV+OpenVINO实现人脸Landmarks实时检测

缘由 自从OpenCV3.3版本引入深度神经网络(DNN)模块之后,OpenCV对DNN模块支持最好的表现之一就是开始支持基于深度学习人脸检测,OpenCV本身提供了两个模型分别是基于Caffe与Tensorflow的,Caffe版本的模型是半精度16位的,tensorflow版本的模型是8位量化的.同时OpenCV通过与OpenVINO IE模型集成实现了底层硬件对对象检测.图像分割.图像分类等常见模型加速推理支持.OpenVINO框架本身提供直接快速开发应用原型的模型库,对很多常见视觉任务都

matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪

Viola-Jones 人眼检测算法+meanshift跟踪算法 这次的代码是对视频中的人眼部分进行检测加跟踪,检测用的是matlab自带的人眼检测工具箱 下面是matlab官网介绍这个算法的一些东西: http://cn.mathworks.com/help/vision/examples/face-detection-and-tracking-using-camshift.html?searchHighlight=Viola-Jones http://cn.mathworks.com/hel

图像特征提取:斑点检测

1. 什么是斑点 斑点通常是指与周围有着颜色和灰度差别的区域.在实际地图中,往往存在着大量这样的斑点,如一颗树是一个斑点,一块草地是一个斑点,一栋房子也可以是一个斑点.由于斑点代表的是一个区域,相比单纯的角点,它的稳定性要好,抗噪声能力要强,所以它在图像配准上扮演了很重要的角色. 同时有时图像中的斑点也是我们关心的区域,比如在医学与生物领域,我们需要从一些X光照片或细胞显微照片中提取一些具有特殊意义的斑点的位置或数量. 比如下图中天空的飞机.向日葵的花盘.X线断层图像中的两个斑点.      在

目标检测之harr---角点检测harr 的opencv实现

本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) 微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本: 2.4.9 本篇文章中,我们一起探讨了OpenCV中Ha

视频序列中扣图,在扣下的区域进行人眼检测

代码功能: 1.能打开视频逐帧显示,按除ESC外任意键显示 2.鼠标在视频上滑动画矩形确定人眼检测范围 3.按ESC确认矩形范围,销毁窗口并进行人眼检测 // FindEyeInVideo.cpp : 定义控制台应用程序的入口点. //cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib #include "stdafx.h" #include "cv.h" #include "highgui.h