赞
踩
- if (faces.size() > 0)
- {
- for (int i = 0; i < faces.size(); i++)
- {
- //使用对角线的两点pt1,pt2画一个矩形轮廓或者填充矩形
- 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);
-
- Mat out(cvDepthImg, Rect(faces[i].x, faces[i].y, faces[i].width, faces[i].height));//将人脸位置截取出来
- Mat means, stddev, covar;
- meanStdDev(out, means, stddev);//计算src图片的均值和标准差
- double stddev_sum = 0;
- double stddev_avg = 0;
- for (int row = 0; row < means.rows; row++)
- {
- stddev_sum = stddev_sum + stddev.at<double>(row);
- }
- stddev_avg = stddev_sum / means.rows;//计算平均标准差
- //stringstream ss, sss;
- //ss << "real_" << stddev_avg;
- //sss << "unreal_" << stddev_avg;
- int font = cv::FONT_HERSHEY_COMPLEX;
- if (stddev_avg > 6)
- {
- printf("真人!标准差 = %.3f\n", stddev_avg);
- cv::rectangle(cvDepthImg, faces[i], cv::Scalar(255, 0, 0), 3);//在深度图中画出人脸
- cv::putText(cvDepthImg, "", cvPoint(faces[i].x, faces[i].y), font, 1.5, cv::Scalar(255, 0, 0), 2);
- }
- else
- {
- printf("假人!标准差 = %.3f\n", stddev_avg);
- cv::rectangle(cvDepthImg, faces[i], cv::Scalar(0, 255, 0), 3);//在深度图中画出人脸
- cv::putText(cvDepthImg, "", cvPoint(faces[i].x, faces[i].y), font, 1.5, cv::Scalar(0, 255, 0), 2);
- }
- }
- }

测试通过,参考博文https://blog.csdn.net/weixin_39235110/article/details/81540733
关于opencv:Mat类详解和用法 参考博文 https://blog.csdn.net/guyuealian/article/details/70159660
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。