vendor: OpenCV 5.0.0 snapshot at 755e50675d97db9b7d449d8bd6b09888646f6c6e
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
Customizing the CN Tracker {#tutorial_customizing_cn_tracker}
|
||||
======================
|
||||
|
||||
Goal
|
||||
----
|
||||
|
||||
In this tutorial you will learn how to
|
||||
|
||||
- Set custom parameters for CN tracker.
|
||||
- Use your own feature-extractor function for the CN tracker.
|
||||
|
||||
This document contains tutorial for the @ref cv::TrackerKCF.
|
||||
|
||||
Source Code
|
||||
-----------
|
||||
|
||||
@includelineno tracking/samples/tutorial_customizing_cn_tracker.cpp
|
||||
|
||||
Explanation
|
||||
-----------
|
||||
|
||||
This part explains how to set custom parameters and use your own feature-extractor function for the CN tracker.
|
||||
If you need a more detailed information to use @ref cv::Tracker, please refer to @ref tutorial_introduction_to_tracker.
|
||||
|
||||
-# **Set Custom Parameters**
|
||||
|
||||
@snippet tracking/samples/tutorial_customizing_cn_tracker.cpp param
|
||||
|
||||
To set custom paramters, an object should be created. Each tracker algorithm has their own parameter format.
|
||||
So, in this case we should use parameter from @ref cv::TrackerKCF since we are interested in modifying the parameter of this tracker algorithm.
|
||||
|
||||
There are several parameters that can be configured as explained in @ref cv::TrackerKCF::Params.
|
||||
For this tutorial, we focussed on the feature extractor functions.
|
||||
|
||||
Several feature types can be used in @ref cv::TrackerKCF.
|
||||
In this case, the grayscale value (1 dimension) and color-names features (10 dimension),
|
||||
will be merged as 11 dimension feature and then compressed into 2 dimension as specified in the code.
|
||||
|
||||
If you want to use another type of pre-defined feature-extractor function, you can check in @ref cv::TrackerKCF::MODE.
|
||||
We will leave the non-compressed feature as 0 since we want to use a customized function.
|
||||
|
||||
-# **Using a custom function**
|
||||
|
||||
You can define your own feature-extractor function for the CN tracker.
|
||||
However, you need to take care about several things:
|
||||
- The extracted feature should have the same size as the size of the given bounding box (width and height).
|
||||
For the number of channels you can check the limitation in @ref cv::Mat.
|
||||
- You can only use features that can be compared using Euclidean distance.
|
||||
Features like local binary pattern (LBP) may not be suitable since it should be compared using Hamming distance.
|
||||
|
||||
Since the size of the extracted feature should be in the same size with the given bounding box,
|
||||
we need to take care whenever the given bounding box is partially out of range.
|
||||
In this case, we can copy part of image contained in the bounding box as shown in the snippet below.
|
||||
|
||||
@snippet tracking/samples/tutorial_customizing_cn_tracker.cpp insideimage
|
||||
|
||||
Whenever the copied image is smaller than the given bounding box,
|
||||
padding should be given to the sides where the bounding box is partially out of frame.
|
||||
|
||||
@snippet tracking/samples/tutorial_customizing_cn_tracker.cpp padding
|
||||
|
||||
-# **Defining the feature**
|
||||
|
||||
In this tutorial, the extracted feature is response of the Sobel filter in x and y direction.
|
||||
Those Sobel filter responses are concatenated, resulting a feature with 2 channels.
|
||||
|
||||
@snippet tracking/samples/tutorial_customizing_cn_tracker.cpp sobel
|
||||
|
||||
-# **Post processing**
|
||||
|
||||
Make sure to normalize the feature with range -0.5 to 0.5
|
||||
|
||||
@snippet tracking/samples/tutorial_customizing_cn_tracker.cpp postprocess
|
||||
@@ -0,0 +1,75 @@
|
||||
Introduction to OpenCV Tracker {#tutorial_introduction_to_tracker}
|
||||
==============================
|
||||
|
||||
Goal
|
||||
----
|
||||
|
||||
In this tutorial you will learn how to
|
||||
|
||||
- Create a tracker object.
|
||||
- Use the roiSelector function to select a ROI from a given image.
|
||||
- Track a specific region in a given image.
|
||||
|
||||
Source Code
|
||||
-----------
|
||||
|
||||
@include tracking/samples/tutorial_introduction_to_tracker.cpp
|
||||
|
||||
Explanation
|
||||
-----------
|
||||
|
||||
-# **Set up the input video**
|
||||
|
||||
@snippet tracking/samples/tutorial_introduction_to_tracker.cpp help
|
||||
|
||||
In this tutorial, you can choose between video or list of images for the program input.
|
||||
As written in the help, you should specify the input video as parameter of the program.
|
||||
If you want to use image list as input, the image list should have formatted numbering
|
||||
as shown in help. In the help, it means that the image files are numbered with 4 digits
|
||||
(e.g. the file naming will be 0001.jpg, 0002.jpg, and so on).
|
||||
|
||||
You can find video samples in opencv_extra/testdata/cv/tracking
|
||||
<https://github.com/opencv/opencv_extra/tree/master/testdata/cv/tracking>
|
||||
|
||||
-# **Declares the required variables**
|
||||
|
||||
You need roi to record the bounding box of the tracked object. The value stored in this
|
||||
variable will be updated using the tracker object.
|
||||
|
||||
@snippet tracking/samples/tutorial_introduction_to_tracker.cpp vars
|
||||
|
||||
The frame variable is used to hold the image data from each frame of the input video or images list.
|
||||
|
||||
-# **Creating a tracker object**
|
||||
|
||||
@snippet tracking/samples/tutorial_introduction_to_tracker.cpp create
|
||||
|
||||
There are at least 7 types of tracker algorithms that can be used:
|
||||
+ MIL
|
||||
+ BOOSTING
|
||||
+ MEDIANFLOW
|
||||
+ TLD
|
||||
+ KCF
|
||||
+ MOSSE
|
||||
|
||||
Each tracker algorithm has their own advantages and disadvantages, please refer the documentation of @ref cv::Tracker for more detailed information.
|
||||
|
||||
-# **Select the tracked object**
|
||||
|
||||
@snippet tracking/samples/tutorial_introduction_to_tracker.cpp selectroi
|
||||
|
||||
Using this function, you can select the bounding box of the tracked object using a GUI.
|
||||
With default parameters, the selection is started from the center of the box and a middle cross will be shown.
|
||||
|
||||
-# **Initializing the tracker object**
|
||||
|
||||
@snippet tracking/samples/tutorial_introduction_to_tracker.cpp init
|
||||
|
||||
Any tracker algorithm should be initialized with the provided image data, and an initial bounding box of the tracked object.
|
||||
Make sure that the bounding box is valid (size more than zero) to avoid failure of the initialization process.
|
||||
|
||||
-# **Update**
|
||||
|
||||
@snippet tracking/samples/tutorial_introduction_to_tracker.cpp update
|
||||
|
||||
This update function will perform the tracking process and pass the result to the roi variable.
|
||||
@@ -0,0 +1,48 @@
|
||||
Using MultiTracker {#tutorial_multitracker}
|
||||
==================
|
||||
|
||||
Goal
|
||||
----
|
||||
|
||||
In this tutorial you will learn how to
|
||||
|
||||
- Create a MultiTracker object.
|
||||
- Track several objects at once using the MultiTracker object.
|
||||
|
||||
Source Code
|
||||
-----------
|
||||
|
||||
@includelineno tracking/samples/tutorial_multitracker.cpp
|
||||
|
||||
Explanation
|
||||
-----------
|
||||
|
||||
-# **Create the MultiTracker object**
|
||||
|
||||
@snippet tracking/samples/tutorial_multitracker.cpp create
|
||||
|
||||
You can create the MultiTracker object and use the same tracking algorithm for all tracked object as shown in the snippet.
|
||||
If you want to use different type of tracking algorithm for each tracked object, you should define the tracking algorithm whenever a new object is added to the MultiTracker object.
|
||||
|
||||
-# **Selection of multiple objects**
|
||||
|
||||
@snippet tracking/samples/tutorial_multitracker.cpp selectmulti
|
||||
|
||||
You can use selectROI to select multiple objects with
|
||||
the result stored in a vector of @ref cv::Rect2d as shown in the code.
|
||||
|
||||
-# **Adding the tracked object to MultiTracker**
|
||||
|
||||
@snippet tracking/samples/tutorial_multitracker.cpp init
|
||||
|
||||
You can add all tracked objects at once to the MultiTracker as shown in the code.
|
||||
In this case, all objects will be tracked using same tracking algorithm as specified in decaration of MultiTracker object.
|
||||
If you want to use different tracker algorithms for each tracked object,
|
||||
You should add the tracked objects one by one and specify their tracking algorithm using the variant of @ref cv::legacy::MultiTracker::add.
|
||||
@sa cv::legacy::MultiTracker::add( const String& trackerType, const Mat& image, const Rect2d& boundingBox )
|
||||
|
||||
-# **Obtaining the result**
|
||||
|
||||
@snippet tracking/samples/tutorial_multitracker.cpp result
|
||||
|
||||
You can access the result from the public variable @ref cv::legacy::MultiTracker::objects provided by the MultiTracker class as shown in the code.
|
||||
Reference in New Issue
Block a user