dlib 06 dlib自带demo 视频内物体跟踪

dlib库的correlation_tracker可以跟踪某个对象从一帧移动到另一帧中的位置。

01 dlib的视频内物体跟踪资源

dlib提供了视频内物体跟踪的数据文件。
代码:dlib\examples\video_tracking_ex.cpp
工程名:video_tracking_ex
检测图像文件:dlib\examples\video_frames,有151个帧图像。
dlib\examples\video_frames\frame_000100.jpg

dlib\examples\video_frames\frame_000250.jpg

02 项目设置

把examples解决方案中的video_tracking_ex工程设置为启动项。

配置属性==>调试==>命令参数==>..\..\..\examples\video_frames
配置属性==>调试==>工作目录==>$(OutDir)

video_tracking_ex

03 运行结果

#这个输出,对对元测试用例稍作了修改,主要是看图像跟踪效果
files[0] = D:\git\dlib\examples\video_frames\frame_000100.jpg
files.size() = 151
files end

这里写图片描述

04 代码

// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*

    This example shows how to use the correlation_tracker from the dlib C++ library.  This
    object lets you track the position of an object as it moves from frame to frame in a
    video sequence.  To use it, you give the correlation_tracker the bounding box of the
    object you want to track in the current video frame.  Then it will identify the
    location of the object in subsequent frames.

    In this particular example, we are going to run on the video sequence that comes with
    dlib, which can be found in the examples/video_frames folder.  This video shows a juice
    box sitting on a table and someone is waving the camera around.  The task is to track the
    position of the juice box as the camera moves around.
*/

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


using namespace dlib;
using namespace std;

int main(int argc, char** argv) try
{
    if (argc != 2)
    {
        cout << "Call this program like this: " << endl;
        cout << "./video_tracking_ex ../video_frames" << endl;
        return 1;
    }

    // Get the list of video frames.  
    std::vector<file> files = get_files_in_directory_tree(argv[1], match_ending(".jpg"));
    std::sort(files.begin(), files.end());
    if (files.size() == 0)
    {
        cout << "No images found in " << argv[1] << endl;
        return 1;
    }

    // Load the first frame.  
    array2d<unsigned char> img;
    load_image(img, files[0]);
    cout << "files[0] = " << files[0] << endl;
    // Now create a tracker and start a track on the juice box.  If you look at the first
    // frame you will see that the juice box is centered at pixel point(92,110) and 38
    // pixels wide and 86 pixels tall.
    correlation_tracker tracker;
    tracker.start_track(img, centered_rect(point(93,110), 38, 86));

    // Now run the tracker.  All we have to do is call tracker.update() and it will keep
    // track of the juice box!
    image_window win;
    cout << "files.size() = " << files.size() << endl;
    for (unsigned long i = 1; i < files.size(); ++i)
    {
        load_image(img, files[i]);
        tracker.update(img);

        win.set_image(img); 
        win.clear_overlay(); 
        win.add_overlay(tracker.get_position());

        //cout << "hit enter to process next frame " << i << endl;
        //cin.get();
    }
    cout << "files end" << endl;
}
catch (std::exception& e)
{
    cout << e.what() << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值