我是靠谱客的博主 单身绿草,最近开发中收集的这篇文章主要介绍基于Visuanl stdio 2017 检测人脸坐标C++代码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

CascadeClassifier face_cascader;
CascadeClassifier eye_cascader;
//记得是/而不是
//位置确定,在opencv中找到这两个文件,
//haarcascade_frontalface_alt.xml
//haarcascade_eye.xml
//可以使用相对路径,可以使用绝对路径
String facefile = "D:\Program Files\opencv\opencv\build\etc\haarcascades\haarcascade_frontalface_alt.xml";
String eyefile = "D:\Program Files\opencv\opencv\build\etc\haarcascades\haarcascade_eye.xml";

int main(int argc, char** argv) {
	if (!face_cascader.load(facefile)) {//载入xml
		printf("could not load face feature data...n");
		return -1;
	}
	if (!eye_cascader.load(eyefile)) {//载入xml
		printf("could not load eye feature data...n");
		return -1;
	}
	//创建窗体
	namedWindow("camera-demo", CV_WINDOW_AUTOSIZE);
	//打开摄像头
	VideoCapture capture(0);

	Mat frame;

	Mat gray;

	vector<Rect> faces;

	vector<Rect> eyes;
	Rect roi1;
	while (capture.read(frame)) {//实时检测
								 //去色
		cvtColor(frame, gray, COLOR_BGR2GRAY);
		
		equalizeHist(gray, gray);
		
		face_cascader.detectMultiScale(gray, faces, 1.2, 3, 0, Size(30, 30));
		
		for (size_t t = 0; t < faces.size(); t++) {
			Rect roi;
			roi.x = faces[static_cast<int>(t)].x; 
			roi.y = faces[static_cast<int>(t)].y; 
			roi1.x = faces[static_cast<int>(t)].x;//接收坐标
			roi1.y = faces[static_cast<int>(t)].y;//接收坐标
			roi.width = faces[static_cast<int>(t)].width; 
			roi.height = faces[static_cast<int>(t)].height / 2;
			Mat faceROI = frame(roi);
			eye_cascader.detectMultiScale(faceROI, eyes, 1.2, 3, 0, Size(20, 20));
			for (size_t k = 0; k < eyes.size(); k++) {
				Rect rect;
				rect.x = faces[static_cast<int>(t)].x + eyes[k].x;
				rect.y = faces[static_cast<int>(t)].y + eyes[k].y;
				rect.width = eyes[k].width; cout << "  x=" << roi1.x << "    ,  y= " << roi1.y << endl;//12312313132
				rect.height = eyes[k].height;
				//识别出眼眶
				rectangle(frame, rect, Scalar(0, 255, 0), 2, 8, 0);
				Point center;
				center.x = rect.x + rect.width / 2;
				center.y = rect.y + rect.height / 2;
				//识别出瞳孔
				circle(frame, center, 5, Scalar(0, 255, 255), -1, 8);
			}
			//识别出人脸
			rectangle(frame, faces[static_cast<int>(t)], Scalar(0, 0, 255), 2, 8, 0);
		}
		//输出实时图像
		imshow("camera-demo", frame);
		//等待键盘响应
		char c = waitKey(30);
		if (c == 27) {
			break;
		}
	}
	waitKey(0);
	return 0;
}

最后

以上就是单身绿草为你收集整理的基于Visuanl stdio 2017 检测人脸坐标C++代码的全部内容,希望文章能够帮你解决基于Visuanl stdio 2017 检测人脸坐标C++代码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部