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