视频追踪
2021/8/20 23:38:10
本文主要是介绍视频追踪,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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()
这篇关于视频追踪的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南