当前位置:   article > 正文

vs2017+openni2+opencv343 人脸活体检测_openni 人脸检测

openni 人脸检测
  1. if (faces.size() > 0)
  2. {
  3. for (int i = 0; i < faces.size(); i++)
  4. {
  5. //使用对角线的两点pt1,pt2画一个矩形轮廓或者填充矩形
  6. rectangle(cvDepthImg, Point(faces[i].x, faces[i].y), Point(faces[i].x + faces[i].width, faces[i].y + faces[i].height), Scalar(0, 255, 0), 1, 8);
  7. Mat out(cvDepthImg, Rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height));//将人脸位置截取出来
  8. Mat means, stddev, covar;
  9. meanStdDev(out, means, stddev);//计算src图片的均值和标准差
  10. double stddev_sum = 0;
  11. double stddev_avg = 0;
  12. for (int row = 0; row < means.rows; row++)
  13. {
  14. stddev_sum = stddev_sum + stddev.at<double>(row);
  15. }
  16. stddev_avg = stddev_sum / means.rows;//计算平均标准差
  17. //stringstream ss, sss;
  18. //ss << "real_" << stddev_avg;
  19. //sss << "unreal_" << stddev_avg;
  20. int font = cv::FONT_HERSHEY_COMPLEX;
  21. if (stddev_avg > 6)
  22. {
  23. printf("真人!标准差 = %.3f\n", stddev_avg);
  24. cv::rectangle(cvDepthImg, faces[i], cv::Scalar(255, 0, 0), 3);//在深度图中画出人脸
  25. cv::putText(cvDepthImg, "", cvPoint(faces[i].x, faces[i].y), font, 1.5, cv::Scalar(255, 0, 0), 2);
  26. }
  27. else
  28. {
  29. printf("假人!标准差 = %.3f\n", stddev_avg);
  30. cv::rectangle(cvDepthImg, faces[i], cv::Scalar(0, 255, 0), 3);//在深度图中画出人脸
  31. cv::putText(cvDepthImg, "", cvPoint(faces[i].x, faces[i].y), font, 1.5, cv::Scalar(0, 255, 0), 2);
  32. }
  33. }
  34. }

测试通过,参考博文https://blog.csdn.net/weixin_39235110/article/details/81540733 

关于opencv:Mat类详解和用法 参考博文 https://blog.csdn.net/guyuealian/article/details/70159660

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/850112
推荐阅读
相关标签
  

闽ICP备14008679号