C++ dlib在VS2019下的环境搭建与基本使用

C++ dlib环境搭建与基本使用

Dlib是一个现代的C++工具库,以机器学习算法为主。

1 环境配置

  1. 下载最新版源码
  2. 编译过程需要用到cmake,注意安装cmake的过程需要添加环境变量。
  3. 解压源代码,然后通过命令行进入源码目录,输入四条指令
    1. mkdir build
    2. cd build
    3. cmake .. -G "Visual Studio 16 2019" -T host=x64
    4. cmake --build .
  4. 我们所创建的build文件夹下面有一个dlib_project.sln文件,即为VS工程文件。以管理员身份打开,解决方案配置为release+x64,然后依次生解决方案下面的ALL_BUILDdlib
  5. 新建VS工程,右键项目名称->属性(快捷键Shift+F4),先将配置改为Release模式,然后编辑VC++目录。
    1. 在包含目录中添加C:\Program Files (x86)\dlib_project\include
    2. 在引用目录和库目录中添加C:\Program Files (x86)\dlib_project\lib

至此,dlib的环境便配置完成。

2 face_detection_ex

在dlib的解压包中,有一个examples文件夹,里面提供了dlib的一些案例。接下来将参考其中的face_detection_ex.cpp来写下我们的学习代码。

#include <iostream>
#include <dlib/image_processing/frontal_face_detector.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>

using namespace dlib;
using namespace std;

int main(int argc, char** argv)
{
	auto detector = get_frontal_face_detector();
	auto path = "D:\\CS\\dlib-19.22\\examples\\faces\\2007_007763.jpg";     //此为examples中的示例图片
	image_window win;           //声明一个展示图象的window
	array2d<unsigned char> img; //声明一个表示灰度图像的矩阵
	load_image(img, path);      //通过路径加载图像
	pyramid_up(img);
	std::vector<rectangle> dets = detector(img);    //存储人脸矩阵
	cout << "number of faces detected:" << dets.size() << endl;
	win.clear_overlay();        //清除缓存
	win.set_image(img);         //设置图像
	win.add_overlay(dets, rgb_pixel(255, 0, 0));    //添加一个overlay
	system("pause");
}

结果如图所示

在这里插入图片描述

上述大部分代码都可以无痛阅读,但仍旧有几点需要说明的地方。

  1. get_frontal_face_detector是通过经典的HOG(方向梯度直方图)特征而构建的一个线性分类器。
  2. pyramid_up即上采样,由于我们的脸部检测器的尺寸是固定的,所以对图像进行上采样,意味着可以检测到更小的人脸。

3 video_tracking_ex.cpp

这个示例用于展示目标跟踪的功能,在video_frames文件夹下是一组被拆分的视频图像,本代码就是要对图像中的果汁盒进行跟踪。

#include <dlib/image_processing.h>
#include <dlib/gui_widgets.h>
#include <dlib/image_io.h>
#include <dlib/dir_nav.h>
#include <Windows.h>

using namespace dlib;
using namespace std;

int main()
{
    auto path = "D:\\CS\\dlib-19.22\\examples\\video_frames";

    // Get the list of video frames.  
    std::vector<file> files = get_files_in_directory_tree(path, match_ending(".jpg"));
    std::sort(files.begin(), files.end());

    array2d<unsigned char> img;     
    load_image(img, files[0]);      //加载第一帧
    correlation_tracker tracker;    //创建tracker
    //下面所创建的矩形,对果汁盒进行了框选
    tracker.start_track(img, centered_rect(point(93, 110), 38, 86));

    image_window win;
    for (unsigned long i = 1; i < files.size(); ++i)
    {
        load_image(img, files[i]);
        tracker.update(img);    //根据图像,对tracker进行更新

        win.set_image(img);
        win.clear_overlay();
        win.add_overlay(tracker.get_position());
        Sleep(100);
    }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值