因最近想做一个人脸识别的项目,大致先用opencv的haar捕获人脸信息,然后再通过dlib提取人脸特征值,最后进行人脸比对。工欲善其事,必先利其器,故有了这篇vs2019搭建opencv与dlib的文章。
- vs2019已经安装完毕,
- 其次下载如下软件源码:
opencv:下载地址:https://sourceforge.net/projects/opencvlibrary/
cmake:下载地址:https://cmake.org/download/
dlib:下载地址:http://dlib.net/
- 分别解压opencv,dlib,cmake
解压opencv,双击下载后的opencv-4.3.0-vc14_vc15.exe,解压至指定的位置,我解压到:F:\opencv4.3,
-
然后在环境变量Path配置opencv的bin目录F:\opencv4.3\opencv\build\x64\vc15\bin,此步很重要,不做opencv运行时会找不到opencv的dll。操作步骤:右键“我的电脑”-》属性-》高级-》环境变量-》Path,F:\opencv4.3\opencv\build\x64\vc15\bin目录添加到环境变量Path
-
-
-
解压dlib,双击dlib-19.20.zip,解压至指定位置,我解压到:F:\dlib-19.20
解压cmake,双击cmake-3.18.0-rc4-win64-x64.zip,解压至指定位置,我解压到:F:\Soft\C++\
- 编译dlib,运行cmake-gui,在刚刚解压的cmake文件夹的:F:\Soft\C++\cmake-3.18.0-rc4-win64-x64\bin下
- 在解压的dlib文件夹(F:\dlib-19.20)下新建build和install文件夹
- 配置cmake
- 配置源码目录,解压的dlib目录为:F:\dlib-19.20
- 配置编译目录,dlib编译目录为新建的build目录:F:\dlib-19.20\build
- 点击Configure
- 配置CMAKE_INSTALL_PREFIX为新建的install目录,F:\dlib-19.20\install
- 点击Generate生成
- 点击open project,然后就会进入vs2019,在vs2019编译dlib
vs2019编译dlib
一、选择Release和X64
二、右键点击ALL_BUILD,选择生成
三、右键点击INSTALL,选择生成,就完成dlib的编译
配置opencv与dlib在vs2019的配置
一、vs2019新建一个空项目,项目保存目录,名称随意填写
二、在项目上右键属性,添加包含目录和库目录
包含目录:
库目录
- 添加包含目录
- dlib的包含目录:F:\dlib-19.20\install\lib
- opencv的包含目录有两个:
F:\opencv4.3\opencv\build\include
F:\opencv4.3\opencv\build\include\opencv2
- 添加库目录
- dlib的库目录:F:\dlib-19.20\install\lib
- opencv的库目录:F:\opencv4.3\opencv\build\x64\vc15\lib
添加附件依赖在dlib和opencv的lib文件夹下复制对应的库名称:
dlib19.20.0_release_64bit_msvc1926.lib所在位置:F:\dlib-19.20\install\lib
opencv_world430.lib所在位置:F:\opencv4.3\opencv\build\x64\vc15\lib
dlib19.20.0_release_64bit_msvc1926.lib
opencv_world430.lib
至此dlib与opencv安装完成,接下来我们写一个测试,先弹出一个dlib的测试窗,关闭后会再弹一个opencv的测试窗口
#include <dlib/gui_widgets.h>
#include <dlib/image_transforms.h>
#include <cmath>
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace dlib;
using namespace std;
using namespace cv;
int main()
{
std::vector<perspective_window::overlay_dot> points;
dlib::rand rnd;
for (double i = 0; i < 20; i += 0.001)
{
dlib::vector<double> val(sin(i), cos(i), i / 4);
dlib::vector<double> temp(rnd.get_random_gaussian(),
rnd.get_random_gaussian(),
rnd.get_random_gaussian());
val += temp / 20;
rgb_pixel color = colormap_jet(i, 0, 20);
points.push_back(perspective_window::overlay_dot(val, color));
}
perspective_window win;
win.set_title("perspective_window 3D point cloud");
win.add_overlay(points);
win.wait_until_closed();
Mat image = imread("D:/test.jpg");
if (image.empty()) {
printf("could not load image...\n");
return -1;
}
imshow("test_opencv_srtup", image);
waitKey(0);
}
先弹出一个dlib的测试窗
然后再弹出一个opencv图片显示窗