视频追踪

1.meanshift原理:假设有一个堆点集,还有一个小窗口,窗口可能是圆形的

也可能是其他形状的,可能要移动这个窗口到点集密度最大的区域中,

也就是质心要到那个最密集的地方

2.流程:

1)图像上选定目标

2)计算选定区域直方图分布,一般是HSV色彩空间的直方图

3)对下一帧图像b同样计算直方图分布

4)计算图像b当中与选定区域直方图分布最为相似的区域,使用meanshift

算法将选定区域沿着最为相似的部分进行移动,知道找到最为相似的区域,

完成追踪

5)重复3到4 的过程,完成整个视频追踪目标

3.API:cv.meanShift(probImage,window,criteria)

参数:

probImage:RIO区域,目标直方图反向投影

window:初始搜索窗口,定义ROI的rect

criteria:确定搜索停止的准则,迭代次数达到最大值,窗口中心的漂移值

大于某个设定的限值

2.实现的主要流程

1).读取视频文件:cv.VideoCapture()

2).感兴趣区域设置:获取每一帧图像,并设置感兴趣区域

3)计算直方图,计算感兴趣区域的HSV直方图,进行归一化

4)目标追踪,设置窗口搜索停止条件,直方图反向投影,进行目标追踪,
并在目标位置绘制矩形框

复制代码
import numpy as np
import cv2 as cv
import matplotlib.pyplot as  plt
#1.视频读取
cap = cv.VideoCapture()
#2.获取每一帧图像
rest,frame = cap.read()
#3.绘制直方图
dst = cv.calHist(cap,(0,0,255))
#4.进行meanshift追踪
ret,trace_window = cv.meanshift(dst,track_window,term_crit)
#5.将追踪的位置绘制在视频上
x,y,w,h = track_window
imgs = cv.rectangle(frame,(x,y),(x+w,y+h),255,2)
cv.imshow()
cap.release()
cv.destroyAllwindow()
复制代码

3.camshift算法是在meanshift算法基础上,可以通过追踪目标的窗口的改变

来优化meanshift算法

复制代码
import numpy as np
import cv2 as cv
import matplotlib.pyplot as  plt
#1.视频读取
cap = cv.VideoCapture()
#2.获取每一帧图像
rest,frame = cap.read()
#3.绘制直方图
dst = cv.calHist(cap,(0,0,255))
#4.进行camshift追踪
ret,track_windodw = cv.CamShift(dst,track_window,term-crit)
#绘制追踪结果
pts = cv.boxPoints(ret)
pts = np.int0(pts)
img2 = cv.polylines(frame,[pts],True,255,2)
cv.imshow()
cap.release()
cv.destroyAllwindow()
复制代码

 

posted @   求知律己  阅读(539)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示