Opencv人脸检测

布满荆棘的人生 2022-05-15 22:13 444阅读 0赞

Opencv人脸检测

使用Opencv来做人脸识别会比较简单,因为opencv库里已经有相关的人脸训练xml文档和相关的函数可以调用

文件在opencv安装目录下的source—-》data—-》haarcascades

70

代码如下:

  1. #include <iostream>
  2. #include <opencv2/opencv.hpp>
  3. #include <opencv2/calib3d/calib3d.hpp>
  4. using namespace std;
  5. using namespace cv;
  6. int main()
  7. {
  8. Mat image, image_gray; //定义两个Mat变量,用于存储每一帧的图像
  9. image = imread("E://xue.bmp");
  10. imshow("原图", image);
  11. cvtColor(image, image_gray, CV_BGR2GRAY);//转为灰度图
  12. equalizeHist(image_gray, image_gray);//直方图均衡化,增加对比度方便处理
  13. //CascadeClassifier eye_Classifier; //载入分类器
  14. CascadeClassifier face_cascade; //载入分类器
  15. //加载分类训练器,OpenCv官方文档提供的xml文档,可以直接调用
  16. //xml文档路径 opencv\sources\data\haarcascades
  17. //if (!eye_Classifier.load("G:\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_eye.xml")) //需要将xml文档放在自己指定的路径下
  18. //{
  19. // cout << "Load haarcascade_eye.xml failed!" << endl;
  20. // return 0;
  21. //}
  22. if (!face_cascade.load("G:\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml"))
  23. {
  24. cout << "Load failed!" << endl;
  25. return 0;
  26. }
  27. //vector 是个类模板 需要提供明确的模板实参 vector<Rect>则是个确定的类 模板的实例化
  28. vector<Rect> eyeRect;
  29. vector<Rect> faceRect;
  30. //检测关于眼睛部位位置
  31. //eye_Classifier.detectMultiScale(image_gray, eyeRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
  32. //for (size_t eyeIdx = 0; eyeIdx < eyeRect.size(); eyeIdx++)
  33. //{
  34. // rectangle(image, eyeRect[eyeIdx], Scalar(0, 0, 255)); //用矩形画出检测到的位置
  35. //}
  36. //检测关于脸部位置
  37. face_cascade.detectMultiScale(image_gray, faceRect, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(20,20));
  38. for (size_t i = 0; i < faceRect.size(); i++)
  39. {
  40. rectangle(image, faceRect[i], Scalar(0, 0, 255)); //用矩形画出检测到的位置
  41. }
  42. imshow("人脸识别图", image); //显示当前帧
  43. waitKey(0);
  44. return 0;
  45. }

70 1

发表评论

表情:
评论列表 (有 0 条评论,444人围观)

还没有评论,来说两句吧...

相关阅读