vs2017+openni2+opencv343 人脸活体检测

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值