文章目录
使用Opencv处理视频跟踪对象时,借助视频原先的背景与当前的获取帧进行比较,有效地区分开视频中的背景和前景。这种方法我们称为背景减除(
Background Subtraction)。
OpenCV—python 视频分析背景提取与前景提取 理论介绍。
一、背景消除建模(BSM)与对象跟踪
实现原理:
BS算法
- 图像分割(GMM – 高斯混合模型)
BackgroundSubtractorMOG2
- 机器学习(KNN –K个最近邻)
BackgroundSubtractorKNN
(效果略好于GMM)
createBackgroundSubtractorMOG2(
int history=500,
double varThreshold=16,
bool detectShadows=true
)
createBackgroundSubtractorKNN(
int history=500,
double dist2Threshold=400.0,
bool detectShadows=true
)
history:用于训练背景的帧数,默认为500帧,如果不手动设置learningRate,history就被用于计算当前的learningRate,此时history越大,learningRate越小,背景更新越慢。
varThreshold:方差阈值,用于判断当前像素是前景还是背景。一般默认16,如果光照变化明显,如阳光下的水面,建议设为25,36,值越大,灵敏度越低;
detectShadows:是否检测影子,设为true为检测,false为不检测,检测影子会增加程序时间复杂度,如无特殊要求,建议设为false
头文件 machine_learning_all.h
:
主函数main.cpp
效果展示
视频目标跟踪二
二、基于颜色目标跟踪
pyrMeanShiftFiltering
实现流程
- inRange过滤
- 形态学操作提取
- 轮廓查找
- 外接矩形获取
- 位置标定