视频追踪(meanshift和camshift算法)

这篇具有很好参考价值的文章主要介绍了视频追踪(meanshift和camshift算法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import numpy as np
import cv2 as cv
# opencv实现meanshift的api
# cv.meanShift(probImage,window,criteria)
# 参数一:roi区域,目标直方图的反向投影
# 参数二:初始搜索窗口,就是定义roi的rect
# 参数三: 确定窗口搜索的停止准则,主要有迭代数达到最大值,窗口中心的漂移值大于某个设定的限值
# 实现Meanshift的主要流程是∶
# 1.读取视频文件:cv.videoCapture()
# 2.感兴趣区域设置:获取第一帧图像,q并设置目标区域,即感兴趣区域3.计算直方图:计算感兴趣区域的HSV直方图,并进行归一化
# 4.目标追踪∶设置窗口搜索停止条件,直方图反向投影,进行目标追踪,并在目标位置绘制矩形框。
# 1 获取视频
cap = cv.VideoCapture('./DOG.mp4')
# 2 指定追踪目标
ret,frame = cap.read()
r,h,c,w = 197,141,0,208
win = (c,r,w,h)
roi = frame[r:r+h,c:c+w]
# 3 计算直方图
hsv_roi = cv.cvtColor(roi,cv.COLOR_BGR2HSV)
roi_hist = cv.calcHist([hsv_roi],[0],None,[180],[0,180])
#归一化
cv.normalize(roi_hist,roi_hist,0,255,cv.NORM_MINMAX)
# 4 目标追踪 ,最大迭代10,漂移1
term = (cv.TERM_CRITERIA_EPS|cv.TERM_CRITERIA_COUNT,10,1)
while(True):
    ret,frame = cap.read()
    if ret==True:
        hst=cv.cvtColor(frame,cv.COLOR_BGR2HSV)
        dst=cv.calcBackProject([hst],[0],roi_hist,[0,180],1)
        ret,win = cv.meanShift(dst,win,term)

        x,y,w,h = win
        img2 = cv.rectangle(frame,(x,y),(x+w,y+h),255,2)
        cv.imshow("frame",img2)
        if cv.waitKey(60)&0xFF == ord('q'):
            break
# 5 释放资源
cap.release()
cv.destroyAllWindows()



camshift算法全称“continuously adaptive mean-shift”(连续自适应meanshift算法),是对meanshift算法的改进算法,可随着跟踪目标的大小变化实时调整搜索窗口的大小,具有较好的跟踪效果。

Camshift算法首先应用meanshift,一旦meanshift收敛,它就会更新窗口的大小,还计算最佳拟合椭圆的方向,从而根据目标的位置和大小更新搜索窗口。如下图所示:
视频追踪(meanshift和camshift算法)

Camshift在opencv中实现时,只需要将上述的meanshift改为camshaft函数即可

在绘制矩形框时有所不同,meanshift是直接画出矩形框,而camshift则是根据求出的点来进行绘制的。

将camshift中:

ret, track_window = cv.meanShift(dst, track_window, term_crit)

#将追踪的位置绘制在视频上,并进行显示
x, y, w, h = track_window
img2 = cv.rectangle(frame, (x,y), (x+w,y+h), 255, 2)

 改为:

#进行camshift追踪
ret, track_window = cv.CamShift(dst, track_window, term_crit)
#绘制追踪结果
pst = cv.boxPoints(ret)
pts = np.int0(pts)
img2 = cv.ploylines(frame,[pts],True,255,2)

算法总结: Meanshift和camshift算法都各有优势,自然也有劣势:

  • . Meanshift算法:简单,迭代次数少,但无法解决目标的遮挡问题并且不能适应运动目标的的形状和大小变化。
  • . camshift算法∶可适应运动目标的大小形状的改变,具有较好的跟踪效果,但当背景色和目标颜色接近时,容易使目标的区域变大,最终有可能导致目标跟踪丢失。

 总结


1.meanshift
        原理:一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束。
APl: cv.meanshift()
        优缺点∶简单,迭代次数少,但无法解决目标的遮挡问题并且不能适应运动目标的的形状和大小变化
2.camshift
        原理:对meanshift算法的改进,首先应用meanshift,一旦meanshift收敛,它就会更新窗口的大小,还计算最佳拟合椭圆的方向,从而根据目标的位置和大小更新搜索窗口。
APl: cv.camshift()
优缺点∶可适应运动目标的大小形状的改变,具有较好的跟踪效果,但当背景色和目标颜色接近时,容易使目标的区域变大,最终有可能导致目标跟踪丢失文章来源地址https://www.toymoban.com/news/detail-402108.html

到了这里,关于视频追踪(meanshift和camshift算法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Yolov5+Deepsort+SlowFast算法实现视频目标识别、追踪与行为实时检测

    前段时间打算做一个目标行为检测的项目,翻阅了大量资料,也借鉴了不少项目,最终感觉Yolov5+Deepsort+Slowfast实现实时动作检测这个项目不错,因此进行了实现。 总的来说,我们需要能够实现实时检测视频中的人物,并且能够识别目标的动作,所以我们拆解需求后,整理核心

    2024年01月20日
    浏览(60)
  • ​Segment-and-Track Anything——通用智能视频分割、目标追踪、编辑算法解读与源码部署

    随着Meta发布的Segment Anything Model (万物分割)的论文并开源了相关的算法,我们可以从中看到,SAM与GPT-4类似,这篇论文的目标是(零样本)分割一切,将自然语言处理(NLP)的提示范式引入了计算机视觉(CV)领域,为CV基础模型提供了更广泛的支持和深度研究的机会。 Segmen

    2024年02月04日
    浏览(37)
  • mac的M1电脑airtest报错ImportError: Error importing numpy: you should not try to import numpy from

    执行的时候报错: airtest 报错ImportError: Error importing numpy: you should not try to import numpy from its source directory; please exit the numpy source tree, and relaunch your python interpreter from there. 还有报错:ImportError: dlopen(/Users/linjing/Library/Python/3.9/lib/python/site-packages/cv2/cv2.abi3.so, 0x0002): tried: ‘/Users/li

    2024年04月11日
    浏览(39)
  • numpy与python版本不匹配-ImportError: Unable to import required dependencies: numpy

    你在运行python代码的时候,是否遇到过下面这种错误 如上信息所示,我的python版本是3.7,Numpy版本是1.21.6,他们的版本不匹配,导致运行报错。 1.通过安装对应的版本号,python3.7对应的是numpy1.19.5,直接按照对应版本即可。 如果你使用的pip,只需要执行 如果你使用的是conda,需

    2024年02月07日
    浏览(39)
  • python报错:cannot import name ‘int‘ from ‘numpy‘

    在Python中导入包时出现报错 报错原因是numpy版本不支持该引用,np.int在numpy1.20已经被废弃掉了 在Anaconda Prompt中查看自己所使用的numpy版本 使用以下命令:  我用的numpy版本是1.24.3,出现了报错 解决方法:更换numpy版本 同样在Anaconda Prompt中输入以下命令: 我重新安装的是1.22

    2024年02月09日
    浏览(46)
  • [相遇 Bug] - ImportError: numpy.core.multiarray failed to import

    因为最近在看点云模型, 在自己的环境上部署该项目: https://github.com/open-mmlab/OpenPCDet/tree/master 这里执行github项目给的demo.py文件, 命令格式如下: 使用如下命令进行安装: 该解决方法是在该github项目的issue里整理得到的, 感谢里面的几位大佬! 链接及图片如下: https://github.com/open-m

    2024年02月16日
    浏览(34)
  • 解决opencv出错:ImportError: numpy.core.multiarray failed to import

    利用安装好opencv后,导入cv2的时候报错,如下 这里是numpy库的版本过低或者过高,不合适刚刚装的opencv版本。 尝试升高或降低numpy版本,一般是升级到高版本 但也不要太高,需要兼容自己的python版本

    2024年02月01日
    浏览(32)
  • 关于UserWarning: The NumPy module was reloaded (imported a second time)的解决

    在用numpy时发现如下警告: 经检查后发现,base环境中安装了numpy,而新环境也安装了numpy,因而出现该问题。 处理方法 卸载base环境/新环境中的一个numpy 此处选择卸载新环境中的numpy 卸载后无警告

    2024年02月11日
    浏览(41)
  • pycharm 运行出现UserWarning: The NumPy module was reloaded (imported a second time).

    解决途中坎坷 :大家可以直接看下面的解决方案。当然我觉得大家还是先看一下我们具体所遇到的问题是否相同,避免错误解决。         看了很多博主的解决方案,还是一头污水,有的博主说是因为numpy库下载入了两次。 刚开始跟着博主说的删除numpy 库就行,结果我在

    2024年02月02日
    浏览(43)
  • Lesson5-2:OpenCV视频操作---视频追踪

    学习目标 理解 meanshift 的原理 知道 camshift 算法 能够使用 meanshift 和 Camshift 进行目标追踪 1.meanshift 1.1原理 m e a n s h i f t meanshift m e an s hi f t 算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可能要移动这个窗口到点集密度最大的区域

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包