IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 视频追踪(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收敛,它就会更新窗口的大小,还计算最佳拟合椭圆的方向,从而根据目标的位置和大小更新搜索窗口。如下图所示:

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()
优缺点∶可适应运动目标的大小形状的改变,具有较好的跟踪效果,但当背景色和目标颜色接近时,容易使目标的区域变大,最终有可能导致目标跟踪丢失

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-03-22 20:35:19  更:2022-03-22 20:39:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:38:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码