1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C++:opencv 人脸检测

C++:opencv 人脸检测

时间:2020-05-09 20:27:57

相关推荐

C++:opencv 人脸检测

C++:opencv 人脸检测

问题描述:

要求

输入一张图片;输出圈出人脸的图片;vs; opencv3.4.6;

效果

输入:

输出:

代码实现:

#include "opencv2/objdetect.hpp"#include "opencv2/highgui.hpp"#include "opencv2/imgproc.hpp"#include <iostream>using namespace std;using namespace cv;/** Function Headers */void detectAndDisplay( Mat frame );/** Global variables */CascadeClassifier face_cascade;CascadeClassifier eyes_cascade;/** @function main */int main( ){if(!face_cascade.load("haarcascade_frontalface_alt.xml")) //opencv自带的人脸识别{cout << "--(!)Error loading face cascade\n";return -1;};if(!eyes_cascade.load("haarcascade_eye_tree_eyeglasses.xml")){cout << "--(!)Error loading eyes cascade\n";return -1;};Mat frame = imread("lena.jpg");//输入图片if (frame.empty()){cout << " wrong" << endl;}detectAndDisplay(frame);return 0;}/** @function detectAndDisplay */void detectAndDisplay( Mat frame ){Mat frame_gray;cvtColor( frame, frame_gray, COLOR_BGR2GRAY );equalizeHist( frame_gray, frame_gray );//-- Detect facesstd::vector<Rect> faces;face_cascade.detectMultiScale( frame_gray, faces );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 );Mat faceROI = frame_gray( faces[i] );//-- In each face, detect eyesstd::vector<Rect> eyes;eyes_cascade.detectMultiScale( faceROI, eyes );for ( size_t j = 0; j < eyes.size(); j++ ){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 );}}//-- Show what you gotimshow( "Face detection", frame );waitKey(0);}

总结

创建一个分类器加载训练模型创建保存人脸的矩阵调包绘图显示

7. CascadeClassifier face_cascade;8. face_cascade.load("训练好的xml模型");9. std::vector<Rect> faces;//人脸的矩阵数据10. face_cascade.detectMultiScale( frame_gray, faces );//输入人脸的照片; 输出人脸的矩形数据11. 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 );//画12. imshow( "Face detection", frame );//显示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。