OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
目标跟踪

详细说明

类  cv::DenseOpticalFlow
 
类  cv::DISOpticalFlow
 DIS 光流算法。更多...
 
类  cv::FarnebackOpticalFlow
 使用 Gunnar Farneback 算法计算稠密光流的类。更多...
 
类  cv::KalmanFilter
 卡尔曼滤波类。更多...
 
类  cv::SparseOpticalFlow
 稀疏光流算法的基础接口。更多...
 
类  cv::SparsePyrLKOpticalFlow
 用于计算稀疏光流的类。更多...
 
类  cv::Tracker
 长期跟踪器的基础抽象类。更多...
 
类  cv::TrackerDaSiamRPN
 
类  cv::TrackerGOTURN
 GOTURN(通过回归网络进行通用目标跟踪)跟踪器。更多...
 
类  cv::TrackerMIL
 MIL 算法以在线方式训练分类器,从而将目标与背景分离。更多...
 
类  cv::TrackerNano
 Nano 跟踪器是一款基于深度神经网络(dnn)的超轻量级通用目标跟踪器。更多...
 
类  cv::TrackerVit
 VIT 跟踪器是一款基于深度神经网络(dnn)的超轻量级通用目标跟踪器。更多...
 
类  cv::VariationalRefinement
 变分光流精细化。更多...
 

枚举

enum  {
  cv::OPTFLOW_USE_INITIAL_FLOW = 4 ,
  cv::OPTFLOW_LK_GET_MIN_EIGENVALS = 8 ,
  cv::OPTFLOW_FARNEBACK_GAUSSIAN = 256
}
 
enum  {
  cv::MOTION_TRANSLATION = 0 ,
  cv::MOTION_EUCLIDEAN = 1 ,
  cv::MOTION_AFFINE = 2 ,
  cv::MOTION_HOMOGRAPHY = 3
}
 

函数

int cv::buildOpticalFlowPyramid (InputArray img, OutputArrayOfArrays pyramid, Size winSize, int maxLevel, bool withDerivatives=true, int pyrBorder=BORDER_REFLECT_101, int derivBorder=BORDER_CONSTANT, bool tryReuseInputImage=true)
 构建可以传递给 calcOpticalFlowPyrLK 的图像金字塔。
 
void cv::calcOpticalFlowFarneback (InputArray prev, InputArray next, InputOutputArray flow, double pyr_scale, int levels, int winsize, int iterations, int poly_n, double poly_sigma, int flags)
 使用 Gunnar Farneback 算法计算稠密光流。
 
void cv::calcOpticalFlowPyrLK (InputArray prevImg, InputArray nextImg, InputArray prevPts, InputOutputArray nextPts, OutputArray status, OutputArray err, Size winSize=Size(21, 21), int maxLevel=3, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01), int flags=0, double minEigThreshold=1e-4)
 使用带金字塔的迭代 Lucas-Kanade 方法计算稀疏特征集的光流。
 
RotatedRect cv::CamShift (InputArray probImage, Rect &window, TermCriteria criteria)
 查找物体的中心、大小和方向。
 
double cv::computeECC (InputArray templateImage, InputArray inputImage, InputArray inputMask=noArray())
 计算两幅图像之间的增强相关系数(ECC)值。
 
Mat cv::estimateRigidTransform (InputArray src, InputArray dst, bool fullAffine)
 计算两个 2D 点集之间的最佳仿射变换。
 
double cv::findTransformECC (InputArray templateImage, InputArray inputImage, InputOutputArray warpMatrix, int motionType, TermCriteria criteria, InputArray inputMask, int gaussFiltSize)
 根据 ECC 标准 [84] 寻找两幅图像之间的几何变换(扭曲)。
 
double cv::findTransformECC (InputArray templateImage, InputArray inputImage, InputOutputArray warpMatrix, int motionType=MOTION_AFFINE, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001), InputArray inputMask=noArray())
 
double cv::findTransformECCWithMask (InputArray templateImage, InputArray inputImage, InputArray templateMask, InputArray inputMask, InputOutputArray warpMatrix, int motionType=MOTION_AFFINE, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 1e-6), int gaussFiltSize=5)
 使用模板图像和输入图像的有效掩码,根据 ECC 标准 [84] 寻找两幅图像之间的几何变换(扭曲)。
 
int cv::meanShift (InputArray probImage, Rect &window, TermCriteria criteria)
 在反向投影图像上寻找物体。
 
Mat cv::readOpticalFlow (const String &path)
 读取 .flo 文件。
 
bool cv::writeOpticalFlow (const String &path, InputArray flow)
 将 .flo 文件写入磁盘。
 

枚举类型文档 (Enumeration Type Documentation)

◆ 匿名枚举

匿名枚举

#include <opencv2/video/tracking.hpp>

枚举值 (Enumerator)
OPTFLOW_USE_INITIAL_FLOW 
Python: cv.OPTFLOW_USE_INITIAL_FLOW
OPTFLOW_LK_GET_MIN_EIGENVALS 
Python: cv.OPTFLOW_LK_GET_MIN_EIGENVALS
OPTFLOW_FARNEBACK_GAUSSIAN 
Python: cv.OPTFLOW_FARNEBACK_GAUSSIAN

◆ 匿名枚举

匿名枚举

#include <opencv2/video/tracking.hpp>

枚举值 (Enumerator)
MOTION_TRANSLATION 
Python: cv.MOTION_TRANSLATION
MOTION_EUCLIDEAN 
Python: cv.MOTION_EUCLIDEAN
MOTION_AFFINE 
Python: cv.MOTION_AFFINE
MOTION_HOMOGRAPHY 
Python: cv.MOTION_HOMOGRAPHY

函数文档 (Function Documentation)

◆ buildOpticalFlowPyramid()

int cv::buildOpticalFlowPyramid ( InputArray img,
OutputArrayOfArrays pyramid(金字塔),
Size winSize,
int maxLevel,
bool withDerivatives = true,
int pyrBorder = BORDER_REFLECT_101,
int derivBorder = BORDER_CONSTANT,
bool tryReuseInputImage = true )
Python
cv.buildOpticalFlowPyramid(img, winSize, maxLevel[, pyramid[, withDerivatives[, pyrBorder[, derivBorder[, tryReuseInputImage]]]]]) -> retval, pyramid

#include <opencv2/video/tracking.hpp>

构建可以传递给 calcOpticalFlowPyrLK 的图像金字塔。

参数
img8 位输入图像。
pyramid(金字塔)输出金字塔。
winSize光流算法的窗口大小。必须不小于 calcOpticalFlowPyrLK 的 winSize 参数。用于计算金字塔层级所需的填充。
maxLevel从 0 开始的最大金字塔层级数。
withDerivatives设置为预计算每个金字塔层级的梯度。如果在构建金字塔时没有计算梯度,则 calcOpticalFlowPyrLK 将在内部计算它们。
pyrBorder金字塔层的边界模式。
derivBorder梯度的边界模式。
tryReuseInputImage如果可能,将输入图像的 ROI 放入金字塔。您可以传递 false 以强制进行数据复制。
返回
所构建金字塔的层数。可以小于 maxLevel。

◆ calcOpticalFlowFarneback()

void cv::calcOpticalFlowFarneback ( InputArray prev,
InputArray next,
InputOutputArray flow,
double pyr_scale,
int levels,
int winsize,
int iterations,
int poly_n,
double poly_sigma,
int flags (标志) )
Python
cv.calcOpticalFlowFarneback(prev, next, flow, pyr_scale, levels, winsize, iterations, poly_n, poly_sigma, flags) -> flow

#include <opencv2/video/tracking.hpp>

使用 Gunnar Farneback 算法计算稠密光流。

参数
prev第一幅 8 位单通道输入图像。
next第二幅输入图像,与 prev 大小和类型相同。
flow计算出的流图像,大小与 prev 相同,类型为 CV_32FC2。
pyr_scale参数,指定为每幅图像构建金字塔时的图像比例(<1);pyr_scale=0.5 表示经典金字塔,每一层的大小都是前一层的两倍小。
levels金字塔层数,包括初始图像;levels=1 表示不创建额外层,仅使用原始图像。
winsize平均窗口大小;较大的值会增加算法对图像噪声的鲁棒性,并提供更多检测快速运动的机会,但会产生更模糊的运动场。
iterations算法在每个金字塔层级进行的迭代次数。
poly_n用于在每个像素中寻找多项式展开的像素邻域大小;较大的值意味着图像将以更平滑的表面进行近似,从而产生更具鲁棒性的算法和更模糊的运动场,通常 poly_n 为 5 或 7。
poly_sigma用于平滑作为多项式展开基础的导数的高斯标准差;对于 poly_n=5,可以设置 poly_sigma=1.1,对于 poly_n=7,较好的值是 poly_sigma=1.5。
flags (标志)操作标志,可以是以下选项的组合
  • OPTFLOW_USE_INITIAL_FLOW 使用输入流作为初始流近似值。
  • OPTFLOW_FARNEBACK_GAUSSIAN 使用高斯 \(\texttt{winsize}\times\texttt{winsize}\) 滤波器代替相同大小的方框滤波器进行光流估计;通常,此选项比使用方框滤波器能获得更准确的流,但代价是速度较低;通常,高斯窗口的 winsize 应设置为较大的值,以达到相同的鲁棒性水平。

该函数使用 [86] 算法为 prev 的每个像素寻找光流,使得

\[\texttt{prev} (y,x) \sim \texttt{next} ( y + \texttt{flow} (y,x)[1], x + \texttt{flow} (y,x)[0])\]

注意
一些示例
  • 使用 Gunnar Farneback 描述的光流算法的示例可以在 opencv_source_code/samples/cpp/fback.cpp 中找到
  • (Python) 使用 Gunnar Farneback 描述的光流算法的示例可以在 opencv_source_code/samples/python/opt_flow.py 中找到

◆ calcOpticalFlowPyrLK()

void cv::calcOpticalFlowPyrLK ( InputArray prevImg,
InputArray nextImg,
InputArray prevPts,
InputOutputArray nextPts,
OutputArray status,
OutputArray err,
Size winSize = Size(21, 21),
int maxLevel = 3,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 0.01),
int flags = 0,
double minEigThreshold = 1e-4 )
Python
cv.calcOpticalFlowPyrLK(prevImg, nextImg, prevPts, nextPts[, status[, err[, winSize[, maxLevel[, criteria[, flags[, minEigThreshold]]]]]]]) -> nextPts, status, err

#include <opencv2/video/tracking.hpp>

使用带金字塔的迭代 Lucas-Kanade 方法计算稀疏特征集的光流。

参数
prevImg第一幅 8 位输入图像或由 buildOpticalFlowPyramid 构建的金字塔。
nextImg第二幅输入图像或与 prevImg 大小和类型相同的金字塔。
prevPts需要寻找光流的二维点向量;点坐标必须是单精度浮点数。
nextPts输出二维点向量(单精度浮点坐标),包含在第二幅图像中计算出的输入特征的新位置;传递 OPTFLOW_USE_INITIAL_FLOW 标志时,向量大小必须与输入时相同。
status输出状态向量(无符号字符);如果已找到对应特征的流,则向量的每个元素设置为 1,否则设置为 0。
err输出误差向量;向量的每个元素设置为对应特征的误差,误差度量类型可以在 flags 参数中设置;如果未找到流,则未定义误差(使用 status 参数识别此类情况)。
winSize每个金字塔层级的搜索窗口大小。
maxLevel从 0 开始的最大金字塔层级数;如果设置为 0,则不使用金字塔(单层);如果设置为 1,则使用两层,依此类推;如果输入中传递了金字塔,则算法将使用与金字塔层级相同数量的层级,但不超过 maxLevel。
criteria参数,指定迭代搜索算法的终止标准(在指定的最高迭代次数 criteria.maxCount 之后,或当搜索窗口移动小于 criteria.epsilon 时)。
flags (标志)操作标志
  • OPTFLOW_USE_INITIAL_FLOW 使用存储在 nextPts 中的初始估计值;如果未设置该标志,则将 prevPts 复制到 nextPts 并将其视为初始估计。
  • OPTFLOW_LK_GET_MIN_EIGENVALS 使用最小特征值作为误差度量(见 minEigThreshold 描述);如果未设置该标志,则使用原始点与移动点周围补丁之间的 L1 距离除以窗口中的像素数作为误差度量。
minEigThreshold算法计算光流方程的 2x2 正规矩阵(在 [38] 中称为空间梯度矩阵)的最小特征值,并除以窗口中的像素数;如果该值小于 minEigThreshold,则过滤掉相应的特征并且不处理其流,这样可以剔除坏点并提高性能。

该函数在金字塔中实现了 Lucas-Kanade 光流的稀疏迭代版本。参见 [38]。该函数已使用 TBB 库进行并行化。

注意
一些示例
  • 使用 Lucas-Kanade 光流算法的示例可以在 opencv_source_code/samples/cpp/lkdemo.cpp 中找到
  • (Python) 使用 Lucas-Kanade 光流算法的示例可以在 opencv_source_code/samples/python/lk_track.py 中找到
  • (Python) 使用 Lucas-Kanade 跟踪器进行单应性匹配的示例可以在 opencv_source_code/samples/python/lk_homography.py 中找到

◆ CamShift()

RotatedRect cv::CamShift ( InputArray probImage,
Rect & window,
TermCriteria criteria )
Python
cv.CamShift(probImage, window, criteria) -> retval, window

#include <opencv2/video/tracking.hpp>

查找物体的中心、大小和方向。

参数
probImage目标直方图的反向投影。见 calcBackProject。
window初始搜索窗口。
criteria底层 meanShift 的停止标准。返回(在旧接口中)CAMSHIFT 收敛所需的迭代次数。该函数实现了 CAMSHIFT 目标跟踪算法 [41]。首先,它使用 meanShift 找到目标中心,然后调整窗口大小并找到最佳旋转。函数返回旋转矩形结构,其中包括目标位置、大小和方向。搜索窗口的下一个位置可以通过 RotatedRect::boundingRect() 获取。

参见跟踪彩色目标的 OpenCV 示例 camshiftdemo.c。

注意
  • (Python) 解释 camshift 跟踪算法的示例可以在 opencv_source_code/samples/python/camshift.py 中找到

◆ computeECC()

double cv::computeECC ( InputArray templateImage,
InputArray inputImage,
InputArray inputMask = noArray() )
Python
cv.computeECC(templateImage, inputImage[, inputMask]) -> retval

#include <opencv2/video/tracking.hpp>

计算两幅图像之间的增强相关系数(ECC)值。

增强相关系数 (ECC) 是衡量两幅图像之间相似度的归一化度量 [84]。结果位于 [-1, 1] 范围内,其中 1 表示完全相似(模仿射平移和缩放),0 表示无相关性,-1 表示完全负相关。

对于单通道图像,ECC 定义为

\[ \mathrm{ECC}(I, T) = \frac{\sum_{x} (I(x) - \mu_I)(T(x) - \mu_T)} {\sqrt{\sum_{x} (I(x) - \mu_I)^2} \cdot \sqrt{\sum_{x} (T(x) - \mu_T)^2}} \]

对于多通道图像(例如 3 通道 RGB),公式推广为

\[ \mathrm{ECC}(I, T) = \frac{\sum_{x} \sum_{c=1}^{C} (I_c(x) - \mu_{I_c})(T_c(x) - \mu_{T_c})} {\sqrt{\sum_{x} \sum_{c=1}^{C} (I_c(x) - \mu_{I_c})^2} \cdot \sqrt{\sum_{x} \sum_{c=1}^{C} (T_c(x) - \mu_{T_c})^2}} \]

其中

  • \(I_c(x), T_c(x)\) 是通道 \(c\) 在空间位置 \(x\) 处的值,
  • \(\mu_{I_c}, \mu_{T_c}\) 是通道 \(c\) 在掩码区域(如果提供)上的平均值,
  • \(C\) 是通道数(目前仅支持 1 和 3),
  • 求和在图像域内的所有像素 \(x\) 上运行(可选择由掩码限制)。
参数
templateImage输入模板图像;必须具有 1 或 3 个通道,且类型为 CV_8U、CV_16U、CV_32F 或 CV_64F。
inputImage用于与模板比较的输入图像;必须具有与 templateImage 相同的类型和通道数。
inputMask可选的单通道掩码,用于指定 inputImage 和 templateImage 中的有效感兴趣区域。
返回
[-1, 1] 范围内的 ECC 相似系数。
另请参阅
findTransformECC

◆ estimateRigidTransform()

Mat cv::estimateRigidTransform ( InputArray src,
InputArray dst,
bool fullAffine )

#include <opencv2/video/tracking.hpp>

计算两个 2D 点集之间的最佳仿射变换。

参数
src存储在 std::vector 或 Mat 中的第一个输入二维点集,或存储在 Mat 中的图像。
dst与 A 大小和类型相同的第二个输入二维点集,或另一个图像。
fullAffine如果为 true,该函数将寻找一个没有额外限制的最佳仿射变换(6 个自由度)。否则,可供选择的变换类别仅限于平移、旋转和均匀缩放的组合(4 个自由度)。

该函数寻找一个最佳仿射变换 [A|b](一个 2 x 3 浮点矩阵),以最佳近似以下两者之间的仿射变换

Two point sets
Two raster images. In this case, the function first finds some features in the src image and
finds the corresponding features in dst image. After that, the problem is reduced to the first
case.

对于点集,问题表述如下:您需要找到一个 2x2 矩阵 A 和 2x1 向量 b,使得

\[[A^*|b^*] = arg \min _{[A|b]} \sum _i \| \texttt{dst}[i] - A { \texttt{src}[i]}^T - b \| ^2\]

其中 src[i] 和 dst[i] 分别是 src 和 dst 中的第 i 个点。 \([A|b]\) 可以是任意形式(当 fullAffine=true 时)或具有以下形式

\[\begin{bmatrix} a_{11} & a_{12} & b_1 \\ -a_{12} & a_{11} & b_2 \end{bmatrix}\]

当 fullAffine=false 时。

已弃用
请改用 cv::estimateAffine2Dcv::estimateAffinePartial2D。如果您对图像使用此函数,请使用 cv::calcOpticalFlowPyrLK 提取点,然后使用估计函数。
另请参阅
estimateAffine2D, estimateAffinePartial2D, getAffineTransform, getPerspectiveTransform, findHomography

◆ findTransformECC() [1/2]

double cv::findTransformECC ( InputArray templateImage,
InputArray inputImage,
InputOutputArray warpMatrix,
int motionType,
TermCriteria criteria,
InputArray inputMask,
int gaussFiltSize )
Python
cv.findTransformECC(templateImage, inputImage, warpMatrix, motionType, criteria, inputMask, gaussFiltSize) -> retval, warpMatrix
cv.findTransformECC(templateImage, inputImage, warpMatrix[, motionType[, criteria[, inputMask]]]) -> retval, warpMatrix

#include <opencv2/video/tracking.hpp>

根据 ECC 标准 [84] 寻找两幅图像之间的几何变换(扭曲)。

参数
templateImage1 或 3 通道模板图像;CV_8U、CV_16U、CV_32F、CV_64F 类型。
inputImage输入图像,应使用最终的 warpMatrix 对其进行扭曲,以便提供与 templateImage 相似的图像,类型与 templateImage 相同。
warpMatrix浮点型 \(2\times 3\) 或 \(3\times 3\) 映射矩阵(扭曲)。
motionType参数,指定运动类型
  • MOTION_TRANSLATION 设置平移运动模型;warpMatrix 为 \(2\times 3\),前 \(2\times 2\) 部分为单位矩阵,估计其余两个参数。
  • MOTION_EUCLIDEAN 设置欧几里得(刚性)变换为运动模型;估计三个参数;warpMatrix 为 \(2\times 3\)。
  • MOTION_AFFINE 设置仿射运动模型(默认);估计六个参数;warpMatrix 为 \(2\times 3\)。
  • MOTION_HOMOGRAPHY 设置单应性为运动模型;估计八个参数;`warpMatrix` 为 \(3\times 3\)。
criteria参数,指定 ECC 算法的终止标准;criteria.epsilon 定义了两次迭代之间相关系数增量的阈值(负的 criteria.epsilon 使 criteria.maxcount 成为唯一的终止标准)。默认值如上文声明所示。
inputMask可选的单通道掩码,用于指示 inputImage 的有效值。
gaussFiltSize可选值,指示高斯模糊滤波器的大小;(默认:5)

该函数估计相对于 ECC 标准 ([84]) 的最佳变换 (warpMatrix),即

\[\texttt{warpMatrix} = \arg\max_{W} \texttt{ECC}(\texttt{templateImage}(x,y),\texttt{inputImage}(x',y'))\]

其中

\[\begin{bmatrix} x' \\ y' \end{bmatrix} = W \cdot \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]

(该等式对于单应性使用齐次坐标成立)。它返回最终的增强相关系数,即模板图像与最终扭曲的输入图像之间的相关系数。当 motionType = 0, 1 或 2 且给出了 \(3\times 3\) 矩阵时,第三行将被忽略。

与 findHomography 和 estimateRigidTransform 不同,函数 findTransformECC 实现了一种基于强度的区域对齐。本质上,该函数会更新粗略对齐图像的初始变换。如果缺少此信息,则使用单位矩阵作为初始化。请注意,如果图像经历了剧烈的位移/旋转,则必须有粗略对齐图像的初始变换(例如,允许图像显示大致相同图像内容的简单欧几里得/相似变换)。在第二幅图像中使用逆向扭曲来获取接近第一幅图像的图像,即在 warpAffine 或 warpPerspective 中使用标志 WARP_INVERSE_MAP。另请参阅演示该函数用法的 OpenCV 示例 image_alignment.cpp。请注意,如果算法不收敛,该函数将抛出异常。

另请参阅
computeECC, estimateAffine2D, estimateAffinePartial2D, findHomography

◆ findTransformECC() [2/2]

double cv::findTransformECC ( InputArray templateImage,
InputArray inputImage,
InputOutputArray warpMatrix,
int motionType = MOTION_AFFINE,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001),
InputArray inputMask = noArray() )
Python
cv.findTransformECC(templateImage, inputImage, warpMatrix, motionType, criteria, inputMask, gaussFiltSize) -> retval, warpMatrix
cv.findTransformECC(templateImage, inputImage, warpMatrix[, motionType[, criteria[, inputMask]]]) -> retval, warpMatrix

#include <opencv2/video/tracking.hpp>

这是一个重载的成员函数,为方便起见而提供。它与上述函数的区别仅在于所接受的参数不同。

◆ findTransformECCWithMask()

double cv::findTransformECCWithMask ( InputArray templateImage,
InputArray inputImage,
InputArray templateMask,
InputArray inputMask,
InputOutputArray warpMatrix,
int motionType = MOTION_AFFINE,
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 1e-6),
int gaussFiltSize = 5 )
Python
cv.findTransformECCWithMask(templateImage, inputImage, templateMask, inputMask, warpMatrix[, motionType[, criteria[, gaussFiltSize]]]) -> retval, warpMatrix

#include <opencv2/video/tracking.hpp>

使用模板图像和输入图像的有效掩码,根据 ECC 标准 [84] 寻找两幅图像之间的几何变换(扭曲)。

此函数通过为模板图像添加掩码扩展了 findTransformECC()。增强相关系数仅在两幅图像中都有效的像素上进行评估:在每次迭代中,inputMask 被扭曲到模板帧中并与 templateMask 结合,只有这些掩码的交集部分才会对目标函数产生贡献。

参数
templateImage1 或 3 通道模板图像;CV_8U、CV_16U、CV_32F、CV_64F 类型。
inputImage输入图像,应使用最终的 warpMatrix 对其进行扭曲,以便提供与 templateImage 相似的图像,类型与 templateImage 相同。
templateMask用于 templateImage 的单通道 8 位掩码,指示要用于对齐的有效像素。必须与 templateImage 大小相同。
inputMask用于 inputImage 的单通道 8 位掩码,指示扭曲前的有效像素。必须与 inputImage 大小相同。
warpMatrix浮点型 \(2\times 3\) 或 \(3\times 3\) 映射矩阵(扭曲)。
motionType参数,指定运动类型
  • MOTION_TRANSLATION 设置平移运动模型;warpMatrix 为 \(2\times 3\),前 \(2\times 2\) 部分为单位矩阵,估计其余两个参数。
  • MOTION_EUCLIDEAN 设置欧几里得(刚性)变换为运动模型;估计三个参数;warpMatrix 为 \(2\times 3\)。
  • MOTION_AFFINE 设置仿射运动模型(默认);估计六个参数;warpMatrix 为 \(2\times 3\)。
  • MOTION_HOMOGRAPHY 设置单应性为运动模型;估计八个参数;warpMatrix 为 \(3\times 3\)。
criteria参数,指定 ECC 算法的终止标准;criteria.epsilon 定义了两次迭代之间相关系数增量的阈值(负的 criteria.epsilon 使 criteria.maxcount 成为唯一的终止标准)。默认值如上文声明所示。
gaussFiltSize计算对齐前用于平滑图像和掩码的高斯模糊滤波器的大小(默认:5)。
另请参阅
findTransformECC, computeECC, estimateAffine2D, estimateAffinePartial2D, findHomography

◆ meanShift()

int cv::meanShift ( InputArray probImage,
Rect & window,
TermCriteria criteria )
Python
cv.meanShift(probImage, window, criteria) -> retval, window

#include <opencv2/video/tracking.hpp>

在反向投影图像上寻找物体。

参数
probImage目标直方图的反向投影。详情见 calcBackProject。
window初始搜索窗口。
criteria迭代搜索算法的停止标准。返回:CAMSHIFT 收敛所需的迭代次数。该函数实现了迭代目标搜索算法。它接收目标的输入反向投影和初始位置。计算反向投影图像窗口内的质心,并将搜索窗口中心移向质心。重复此过程,直到完成指定的最高迭代次数 criteria.maxCount 或窗口中心移动小于 criteria.epsilon。该算法在 CamShift 内部使用,与 CamShift 不同,搜索窗口的大小或方向在搜索过程中不会改变。您可以直接将 calcBackProject 的输出传递给此函数。但如果预先过滤反向投影并去除噪声,可以获得更好的结果。例如,您可以通过 findContours 检索连通分量,丢弃面积较小的轮廓 (contourArea),并使用 drawContours 渲染剩余的轮廓。

◆ readOpticalFlow()

Mat cv::readOpticalFlow ( const String & path)
Python
cv.readOpticalFlow(path) -> retval

#include <opencv2/video/tracking.hpp>

读取 .flo 文件。

参数
path待加载文件的路径

函数 readOpticalFlow 从文件中加载流场并将其作为单个矩阵返回。结果 Mat 的类型为 CV_32FC2 - 浮点型,2 通道。第一通道对应水平方向的流 (u),第二通道对应垂直方向 (v)。

◆ writeOpticalFlow()

bool cv::writeOpticalFlow ( const String & path,
InputArray flow )
Python
cv.writeOpticalFlow(path, flow) -> retval

#include <opencv2/video/tracking.hpp>

将 .flo 文件写入磁盘。

参数
path待写入文件的路径
flow待存储的流场

该函数将流场存储在文件中,成功时返回 true,否则返回 false。流场必须是 2 通道浮点矩阵 (CV_32FC2)。第一通道对应水平方向的流 (u),第二通道对应垂直方向 (v)。