当前位置:   article > 正文

Opencv视觉处理(C++)语法学习(10)实践案例:实时人脸识别+美颜_opencv 人脸美颜

opencv 人脸美颜

该案例的思路:
首先用老师提供的gitee仓库下载文件,因为有墙原本的脚本没办法用的。
下载->models->facedector
接着就是我们的demo演示了

void QuickDemo::face_dected_demo()
{
	VideoCapture capture("E:/data/vtest.avi");
	Mat frame;
	std::string root_dir = "D:/opencv/sources/samples/dnn/face_detector/";
	dnn::Net net=dnn::readNetFromTensorflow(root_dir+"opencv_face_detector_uint8.pb",root_dir+"opencv_face_detector.pbtxt");//读取模型,读取配置文件
	while (1)
	{
		capture.read(frame);
		if (frame.empty())
		{
			break;
		}
		Mat blob = dnn::blobFromImages(frame,1.0,Size(100,100),Scalar(104,177,123),false,false);
		net.setInput(blob);//NCHW
		Mat probs = net.forward();//多少张图形,image.index
		Mat dectionRes(probs.size[2], probs.size[3],CV_32F,probs.ptr<float>());
		//解析该结果
		for (int i = 0; i < dectionRes.rows; i++)
		{
			float confidence = dectionRes.at<float>(i, 2);
			if (confidence > 0.5)
			{
				int x1 = static_cast<int>(dectionRes.at<float>(i,3)*frame.cols);
				int y1= static_cast<int>(dectionRes.at<float>(i, 4) * frame.rows);
				int x2=static_cast<int>(dectionRes.at<float>(i, 5) * frame.cols);
				int y2=static_cast<int>(dectionRes.at<float>(i, 6) * frame.rows);
				Rect box(x1, y1, (x2 - x1), (y2 - y1));
				rectangle(frame, box, Scalar(0, 0, 255), 2, LINE_AA, 0);
			}
		}
		imshow("人脸检测显示", frame);
		char c = waitKey(10);
		if (c == 27)
		{
			break;
		}

	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/268893
推荐阅读
相关标签
  

闽ICP备14008679号