vendor: OpenCV 5.0.0 snapshot at 755e50675d97db9b7d449d8bd6b09888646f6c6e

This commit is contained in:
Gitea Mirror Bot
2026-08-22 00:11:13 +08:00
commit 12022378a3
3872 changed files with 2513409 additions and 0 deletions
@@ -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.