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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章