CamShift是一种算法,该算法基于使用刻痕算法的视频序列的结果,并使用上一个帧的结果(搜索窗口的中心位置和窗口大小)作为求换窗口的初始值的算法在这种方式上,我们可以跟踪视频中的移动对象。
首先,我们假设平面空间具有这样一个随机分布点,如下所示:我们将特定点作为一个圆,适当的半径r作为圆:
然后,所有落入圆的点都连接到圆心连接以形成向量:
这样,不难看到矢量的数量形成了更密集的分布区域,因此我们将最密集的方向作为心脏转移的方向。
逐渐地,我们的圆圈最终将留在该空间中最密集的区域。
我们不会详细得出数学公式。
并在图像处理中应用此算法。通常,图像是矩阵。像素均匀分布在图像上,并且没有密度。如果我们单击x的概率密度,该方法的使用如下:x作为圆的中心和r作为半径。点XI落入球定义了两个模式规则。
(1)X像素点的颜色与XI像素的颜色点相似,我们定义的概率密度越高。(2)越接近XI的位置,定义的概率密度越高。
因此,总概率密度的定义是两个规则和概率密度乘以产品的结果:
其中:正确类型的第二个因素表示空间位置的信息。越接近远处,值越大,第三表示颜色信息,颜色越相似,值越大。如图的左上角所示,根据(4)计算得出的概率密度显示在图的右上
因此,我们可以通过计算图像图像的直方图根据上述算法跟踪目标。
Void Calchist(&ROI,1,0,MaskRoi,Hist,1&Hist和Phranges)
&ROI:输入图像
1:在第一个参数中存储了多少张图像
0:需要统计的频道索引
MASKROI:输入图像的掩码,可选操作掩码,此处的非零掩码元素用于标记统计直接图的数组元素数据
历史:输出的目标
1:需要计算的直方图的尺寸
&Hist:每个维度的直方图数组
&phranges:每个维度的范围。
void calcbackproject(&hue,1,0,hist,backproj和phranges)
色相:输入图像
1:输入图像数量
0:需要统计的频道索引
历史:输入的直方图
backproj:目标反向投影数组必须是一个单个通道
phranges:每个维数的边界
void camshift(backproj,trackwindow,tercriteria(cv_termcrit_eps | cv_termcrit_iter,10,1))))))))))))))))))))))))))))))))
Backproj:输入图像图像直方图的反向投影图
TrackWindow:初始位置矩形跟踪目标盒
Tercriteria(cv_termcrit_eps | cv_termcrit_iter,10,1):算法结束条件
1.获取跟踪目标的HSV图像并将H零件分开;
2.根据阈值构建口罩;
3.计算直方图,然后返回;
4.右 - 图形反向投影calcbackProject();
5.凸轮班算法轨道
6.在原始视频中绘制矩形锁定跟踪目标。
首先,我们选择确定跟踪的轨道:
按空格键并开始识别跟踪。
原始:https://juejin.cn/post/7095936555520360484