ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++ 的 open cv 人脸检测代码

2021-07-09 12:07:01  阅读:219  来源: 互联网

标签:eyes -- frame c++ cascade faces include open cv


c++ 的 open cv 人脸检测代码

 

// ConsoleApplication2.cpp: 主项目文件。

#include "stdafx.h"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <iostream>  
#include <stdio.h>  

using namespace std;
using namespace cv;

/** Function Headers */
void detectAndDisplay(Mat frame);

/** Global variables */
String face_cascade_name = "E:\\code\\opencv\\opencv3.4.4\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml";//
String eyes_cascade_name = "E:\\code\\opencv\\opencv3.4.4\\opencv\\sources\\data\\haarcascades\\haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;   //定义人脸分类器  
CascadeClassifier eyes_cascade;   //定义人眼分类器  
String window_name = "Capture - Face detection";

CascadeClassifier cascade, nestedCascade;

/** @function main */
int main(void)
{
	//Mat frame = imread("D:\\Documents\\Visual Studio 2015\\Projects\\ConsoleApplication2\\ConsoleApplication2\\001.jpg");
	Mat frame = imread("001.jpg");
	//VideoCapture capture;  
	//Mat frame;  

	//-- 1. Load the cascades  
	if (!cascade.load(face_cascade_name)) { printf("--(!)Error loading face cascade\n"); return -1; };
	if (!nestedCascade.load(eyes_cascade_name)) { printf("--(!)Error loading eyes cascade\n"); return -1; };

	//-- 2. Read the video stream  
	//capture.open(0);  
	//if (!capture.isOpened()) { printf("--(!)Error opening video capture\n"); return -1; }  

	//while (capture.read(frame))  
	//{  
	//  if (frame.empty())  
	//  {  
	//      printf(" --(!) No captured frame -- Break!");  
	//      break;  
	//  }  

	//-- 3. Apply the classifier to the frame  
	detectAndDisplay(frame);

	int c = waitKey(0);
	if ((char)c == 27) { return 0; } // escape  
									 //}  
	return 0;
}

/** @function detectAndDisplay */
void detectAndDisplay(Mat frame)
{
	std::vector<Rect> faces;
	Mat frame_gray;

	cvtColor(frame, frame_gray, COLOR_BGR2GRAY);
	equalizeHist(frame_gray, frame_gray);

	//-- Detect faces  
	//cascade.detectMultiScale(frame_gray, faces, 1.1, 3, CV_HAAR_DO_ROUGH_SEARCH, Size(70, 70), Size(100, 100));
	cascade.detectMultiScale(frame_gray, faces,
		1.1, 2, 0
		//|CV_HAAR_FIND_BIGGEST_OBJECT
		//|CV_HAAR_DO_ROUGH_SEARCH
		| CV_HAAR_SCALE_IMAGE
		, Size(30, 30));

	for (size_t i = 0; i < faces.size(); i++)
	{
		//Point center(faces[i].x + faces[i].width / 2, faces[i].y + faces[i].height / 2);  
		//ellipse(frame, center, Size(faces[i].width / 2, faces[i].height / 2), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0);  
		rectangle(frame, faces[i], Scalar(255, 0, 0), 2, 8, 0);

		Mat faceROI = frame_gray(faces[i]);
		std::vector<Rect> eyes;

		//-- In each face, detect eyes  
		nestedCascade.detectMultiScale(faceROI, eyes, 1.1, 1, CV_HAAR_DO_ROUGH_SEARCH, Size(3, 3));

		for (size_t j = 0; j < eyes.size(); j++)
		{
			Rect rect(faces[i].x + eyes[j].x, faces[i].y + eyes[j].y, eyes[j].width, eyes[j].height);

			//Point eye_center(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(frame, eye_center, radius, Scalar(255, 0, 0), 4, 8, 0);  
			rectangle(frame, rect, Scalar(0, 255, 0), 2, 8, 0);
		}
	}
	//-- Show what you got  
	namedWindow(window_name, 2);
	imshow(window_name, frame);
}

 

标签:eyes,--,frame,c++,cascade,faces,include,open,cv
来源: https://blog.51cto.com/u_14640655/3023734

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有