一、在Visual Studio配置Dlib库步骤
1.首先下载好dlib和cmake
下载Dlib安装包链接:Index of /files
可根据需要选择下载的版本,这里的例子是dlib-19.24版本的
安装cmake:Download CMake
安装好了cmake直接点击cmake-gui.exe打开
2.编译dlib源码
在dlib目录下新建一个build文件夹,在build文件夹下,分别新建一个x64和x86文件夹,用于保存64位和32位的编译文件,根据自己需要创建,我这里用的是64位,所以只创建了x64文件夹,如下:
对刚刚打开的cmake进行配置:
(1).在红色框内填写自己的真实路径(此处忽略掉Name和Value的内容,这个是我已经编译过的结果,实际上在完成编译之前应该是空的.)
(2).点击Configure
点击“Configure” 后,选择对应的编译器版本和“Use default native compilers”,编译器有64位和32位,注意选择,然后点击“finish”。
编译完后下面有报错,并且文件夹内并没有生成dlib.sln.
(3).点击“Generate” 按钮,继续生成,会发现一片红没有了,文件夹内也出现想要的“dlib.sln”文件
(4).生成lib链接库
找到“dlib.sln”文件,使用vs打开,点击生成,选择“重新生成解决方案”或者“生成dlib”,64位、32位、debug、release分别生成一个,我这里使用的前者。
3.配置Dlib
打开Visual Studio,新建一个C++项目,右键点击项目名称选择属性,配置VC++目录下的包含目录和库目录,以及链接器下的输入下的附加依赖项:
注意在配置时,选择自己对应的Debug和Release模式,比如说我这里使用的是x64的Debug。
若没有进行上述的dlib配置,在C++使用dlib库时就会报错:
因此,配置dlib是非常重要的一步.
4.如果运行报错
将build下的config.h文件复制到dlib源码里面去,替换掉源码中的config.h文件,可以解决报错,再次运行就成功了。
二、代码演示检测结果
1.演示检测人脸的demo代码:
#include <opencv2/opencv.hpp>
#include <fstream>
#include <filesystem>
#include <dlib/opencv.h>
#include <dlib/image_processing.h>
#include <dlib/image_processing/frontal_face_detector.h>
using namespace dlib;
using namespace cv;
using namespace std;
int main()
{
// 创建人脸检测器
dlib::frontal_face_detector detector = dlib::get_frontal_face_detector();
string file_path = "./image/face_data/1.jpg";
cv::Mat image = cv::imread(file_path);
if (image.empty())
{
printf("图像读取失败\n");
return -1;
}
printf("图像读取成功!\n");
//显示输入图片
namedWindow("input_image", WINDOW_FREERATIO);
imshow("input_image", image);
//处理图像
/*FaceRecog qd;
qd.face(image);*/
// 转换图像格式为dlib可用的类型
dlib::cv_image<dlib::bgr_pixel> dlibImage(image);
// 在图像中检测人脸
std::vector<dlib::rectangle> faces = detector(dlibImage);
// 在图像上标记检测到的人脸
for (const auto& face : faces)
{
cv::rectangle(image, cv::Point(face.left(), face.top()), cv::Point(face.right(), face.bottom()), cv::Scalar(0, 255, 0), 2);
}
// 显示带有人脸标记的图像
cv::namedWindow("Detected Faces", WINDOW_FREERATIO);
cv::imshow("Detected Faces", image);
cout << "检测到的人脸数 :" << faces.size() << endl;
cv::waitKey(0);
system("pause"); // 暂停程序执行,等待用户按下任意键继续
return 0;
}
2.演示结果:
注:绿色矩形框出来的表示检测出来的人脸。