OpenCV视频分析与对象跟踪C++(三)CAMShift对象跟踪

该博客详细介绍了OpenCV中的CAMShift对象跟踪算法,适用于处理目标在视频中发生移动、变形的情况。CAMShift算法能自动调整窗口尺寸,确保对变形目标的精确跟踪。博客内容包括算法原理、步骤说明以及相关API的使用,并提供了代码示例来展示其工作过程。
摘要由CSDN通过智能技术生成

MeanShift算法(均值漂移)
假设有一堆数据,不均匀的在平面空间分布,首先通过均值计算,评估中心点在哪里,然后中心向密度的地方平移最后找到密度最高的地方。
MeanShift算法使用的直方图比较与模板匹配类似,这两个算法只能匹配Windows固定的roi区域。
如果视频中选择的roi区域的移动忽远忽近(甚至变形),这两种算法就不能再准确的跟踪到roi区域这时候用CAMShift
:窗口尺寸自动变化
:适合变形目标检测

步骤:
是第一帧的话则:

  • 读取第一帧
  • 选择ROI区域
  • HSV空间H通道直方图
  • 直方图反向映射
  • CAMShift位置跟踪
  • 绘制位置更新显示

不是第一帧的话则:

  • 直方图反向映射
  • CAMShift位置跟踪
  • 绘制位置更新显示

相关API:

mixChannels( // 将输入数组的指定通道复制到输出数组的指定通道
const Mat* src, //输入数组或向量矩阵,所有矩阵的大小和深度必须相同。
size_t nsrcs, //矩阵的数量
Mat* dst, //输出数组或矩阵向量,大小和深度必须与src相同
size_t ndsts,//矩阵的数量
const int* fromTo,//指定被复制通道与要复制到的位置组成的索引对
size_t npairs //fromTo中索引对的数目
);


calcHist(// 计算直方图
const Mat* images,//输入图像指针
int images,// 图像数目
const int* channels,// 要计算的通道数的下标,可以传一个数组 {0, 1} 表示计算第0通道与第1通道的直方图,此数组长度要与histsize ranges 数组长度一致
InputArray mask,// 输入mask,可选,如有,则表示只计算mask元素值为255的位置的直方图
OutputArray hist,//输出的直方图数据
int dims,// 维数
const int* histsize,// 直方图级数, 对应 bins
const float** ranges,// 值域范围
bool uniform,// true by default   是否归一化到 0-1 之间
bool accumulate// false by defaut 多通道时true
)

calcBackProject ( // 反向投影
const Mat * images, // 输入图像,图像深度必须位CV_8U,CV_16U或CV_32F中的一种,尺寸相同,每一幅图像都可以有任意的通道数
int nimages, // 输入图像的数量
const int * channels, 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值