使用OpenCV中的DNN模块进行人脸识别的官方示例代码(C++版本):

发布时间 2023-07-16 16:07:41作者: blackstrom
chatgpt生成

#include <opencv2/core.hpp> #include <opencv2/dnn.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/highgui.hpp> using namespace cv; using namespace dnn; int main() { // 加载模型和配置文件 String model_path = "path_to_model_file"; String config_path = "path_to_config_file"; Net net = readNetFromCaffe(config_path, model_path); // 读取输入图像 Mat image = imread("path_to_input_image"); // 构建blob,将图像输入模型中进行预处理 Mat blob = blobFromImage(image, 1.0, Size(300, 300), Scalar(104.0, 177.0, 123.0)); // 设置输入blob net.setInput(blob); // 运行前向传播,获取人脸检测结果 Mat detections = net.forward(); // 遍历检测结果 for (int i = 0; i < detections.size[2]; i++) { float confidence = detections.at<float>(0, 0, i, 2); // 获取置信度 if (confidence > 0.5) // 设置置信度阈值 { // 计算人脸框的位置 int startX = static_cast<int>(detections.at<float>(0, 0, i, 3) * image.cols); int startY = static_cast<int>(detections.at<float>(0, 0, i, 4) * image.rows); int endX = static_cast<int>(detections.at<float>(0, 0, i, 5) * image.cols); int endY = static_cast<int>(detections.at<float>(0, 0, i, 6) * image.rows); // 绘制人脸框和置信度 String text = format("%.2f%%", confidence * 100); int y = startY - 10 > 10 ? startY - 10 : startY + 10; rectangle(image, Point(startX, startY), Point(endX, endY), Scalar(0, 255, 0), 2); putText(image, text, Point(startX, y), FONT_HERSHEY_SIMPLEX, 0.45, Scalar(0, 255, 0), 2); } } // 显示输出图像 imshow("Output", image); waitKey(0); destroyAllWindows(); return 0; }

请确保替换示例代码中的model_pathconfig_pathimage_path为正确的文件路径。

以上代码将从给定的模型文件和配置文件中加载人脸检测器,并对输入图像进行人脸检测,然后显示输出图像,并在检测到的人脸周围绘制边框和检测到的置信度。