OpenCV 第八章 目标跟踪

OpenCV 第八章 目标跟踪
8.1 检测移动的目标
利用帧差异

1.将第一帧设置为输入的背景,对每帧进行灰度转换和平滑滤波操作
2.将后续读取的帧计算与背景的差异,得到差分图
3.对差分图进行二值化和膨胀,然后在差分图中找轮廓

cv2.getStructuringElement( )
这个函数的第一个参数表示内核的形状,有三种形状可以选择。
矩形:MORPH_RECT; 交叉形:MORPH_CROSS; 椭圆形:MORPH_ELLIPSE;
第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得
背景建模:
第一步:使用cv2.VideoCapture() 构造读取模型
第二步:使用cv2.getStructureElement(cv2.MORPH_ELLIPSE, (3, 3)) # 构造形态学使用的kernel,即np.ones((3, 3), np.uint8)
第三步:构造cv2.createBackgroundSubtractorMOG2() 实例化混合高斯模型
第四步:cap.read()从视频中读取文件,并使用model.apply(frame) 使用上混合高斯模型
第五步:使用cv2.morpholyEx(image, cv2.MORPH_OPEN, kernel) 使用开运算进行噪音的去除
第六步:cv2.findCountours找出图片中的轮廓,对其进行循环
第七步:对于周长大于188的轮廓,使用cv2.boundingRect计算外接矩阵,使用cv2.rectangle画出外接矩阵,作为人
第八步:使用cv2.imshow()展示图片,使用cv2.waitkey(150) & 0xff == 27来延长放映的时间

OpenCV3中有三种背景分割器:K-Nearest(KNN)、Mixture of Gaussians(MOG2)、Geometric Multigid(GMG)
8.2.1 均值漂移和GAMShift
均值漂移(Meanshift)是一种目标跟踪算法,该算法寻找概率函数离散样本的最大密度,并重新计算在下一帧的最大密度,给出了目标的移动方向。重新进行该计算知道与原始中心匹配,或者在连续迭代计算后中心保持不变(收敛)。
直方图反向投影:将得到的直方图投影到图像上,得到每个像素属于原始图像的概率。
CAMShift与均值漂移相似,不同的是,会根据具体的旋转来绘制矩形,这种旋转会与被跟踪对象一起旋转。

卡尔曼滤波器

对含有噪声的输入数据流进行递归操作,并产生底层系统状态在统计意义上的最优估计。分为以下两个阶段。
预测:用由当前点计算的协方差来估计目标的新位置。
更新:记录目标的位置,并为下一次循环计算修正协方差。

OpenCV 第九章 人工神经网络ANN
ANN是一个统计模型:空间S和概率P,P是S的近似分布。
感知器:接受多输入输出一个值的函数。每个输入都有一个与之相关联的权重,用来表示函数中输入的重要性。权重是自适应的,可以通过学习及时调整。
输入层:输入的数目=属性值
输出层:输出的数目=类别数
隐藏层:数目取经验值,在输入层与输出层大小之间,若输入层与输出层大小相差很大,隐藏层数目与输出层更接近。对于相对较小的输入层,隐藏层=2/3(输入+输出)或 隐藏层<2*输入。
过拟合:待分类训练数据提供的信息没有什么意义,而隐藏层又含有太多信息时会发生过拟合。

你可能感兴趣的:(OpenCV 第八章 目标跟踪)