Python Opencv实践 - 视频目标追踪CamShift

news/2024/7/23 8:36:35 标签: opencv, 人工智能, 计算机视觉

        CamShift是MeanShift的改进,能够动态自适应跟踪目标大小,而不是一个固定窗口。在opencv中使用CamShift进行目标追踪的方法和MeanShift差不多,只需要替换meanShift方法并且使用cv.polylines绘制出结果多边形窗口即可。

参考资料:

Python Opencv实践 - 视频目标追踪MeanShift_亦枫Leonlew的博客-CSDN博客

python opencv入门 Meanshift 和 Camshift 算法(40)_meanshift源码opencv_红鲤鱼遇绿鲤鱼的博客-CSDN博客

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

#打开视频
video = cv.VideoCapture("../SampleVideos/milo.mp4")
#读取第一帧图像
ret,frame = video.read()
plt.figure(figsize=(16,16))
plt.imshow(frame[:,:,::-1])
cv.imwrite("tmp.jpg", frame)


#设置跟踪目标的位置(行,高,列,宽)
row,height,col,width = 670,80,360,120
obj_track_window = (col, row, width, height)
#设置ROI区域
roi = frame[row:row+height,col:col+width]
plt.imshow(roi[:,:,::-1])

#计算ROI的直方图
#1. 转换到HSV色彩空间
roi_hsv = cv.cvtColor(roi, cv.COLOR_BGR2HSV)
#2. 计算ROI区域直方图
roi_hist = cv.calcHist([roi_hsv],[0],None,[180],[0,180])
#   直方图归一化
cv.normalize(roi_hist, roi_hist, 0, 255, cv.NORM_MINMAX)

#进行目标追踪
#1. 设置窗口搜索终止条件:最大迭代次数,窗口中心漂移最小值
#参考资料:https://blog.csdn.net/csg3140100993/article/details/102613843
term_crit = (cv.TERM_CRITERIA_EPS|cv.TERM_CRITERIA_COUNT, 10, 1)

#2. 处理每一帧
while (True):
    ret,frame = video.read()
    if ret == False:
        break;
    #计算直方图反向投影
    #cv.calcBackProject(image, channels, hist, ranges, scale[, dst])
    #image:输入图像(HSV),要用中括号[]括起来
    #channels:用于计算反向投影的通道列表,通道数必须与直方图的维度匹配
    #hist:模板图像的直方图
    #ranges:直方图中每个维度bin的取值范围
    #scale:缩放因子,一般为1
    #参考资料:https://www.jianshu.com/p/d0a2c70cf99e
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    target = cv.calcBackProject([hsv],[0],roi_hist,[0,180],1)
    #使用MeanShit追踪
    #cv.CamShift(probImage, window, criteria)
    #probImage:ROI区域,即目标直方图的反向投影
    #window:初始搜索窗口,就是定义ROI的rect
    #criteria:确定窗口搜索停止的准则,主要有迭代次数达到设置的最大值,窗口中心的漂移值大于某个设定的限值等
    #参考资料:https://blog.csdn.net/tengfei461807914/article/details/80412482
    ret,obj_track_window = cv.CamShift(target, obj_track_window, term_crit)
    #绘制追踪目标多边形
    points = cv.boxPoints(ret)
    points = np.intp(points)
    img_track = cv.polylines(frame, [points], True, (0,255,0), 2)
    cv.imshow('MeanShift Demo', img_track)
    if cv.waitKey(30) & 0xFF == ord('q'):
        break;

video.release()
cv.destroyAllWindows()

 


http://www.niftyadmin.cn/n/5037654.html

相关文章

MySQL数据库查缺补漏——基础篇

MySQL数据库查缺补漏-基础篇 基础篇 net start mysql80[服务名] net stop mysql80 create database pshdhx default charset utf8mb4; 为什么不使用utf8?因为其字符占用三个字节,有四个字节的字符,所有需要设置为utf8mb4; 数值类型&…

2023 年和 2024 年人工智能和机器学习会议清单

会议地点日期PyCon 乌干达乌干达坎帕拉2023年9月21日 - 2023年9月23日大数据、数据科学和机器学习世界技术峰会德克萨斯州奥斯汀2023年9月21日 - 2023年9月23日MLCon纽约州纽约市2023年9月25日 - 2023年9月28日2023 年人工智能大会加利福尼亚州旧金山2023年9月26日 - 2023年9月…

linux-crontab每分钟定时执行/定时任务调度

文章目录 一、前言二、crontab概述2.1、crontab命令简介2.2、linux定时任务分类 三、安装crontab四、crontab使用4.1、crontab语法4.2、定时任务设置4.3、定时任务格式4.4 crontab表达式在线验证 五、实例六、定时任务的日志 一、前言 本文讲解linux上如何调用定时任务&#x…

(第十一天)初识SpringMVC SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

SSM框架的学习与应用(Spring Spring MVC MyBatis)-Java EE企业级应用开发学习记录(第十一天)初识SpringMVC 今天我们要来学习一下SSM框架的最后一个框架SpringMVC 一、初认SpringMVC 基本概念: ​ Spring MVC(Model-View-Co…

【数据结构】二叉树的节点数,叶子数,第K层节点数,高度,查找x节点,判断是否为完全二叉树等方法

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

Linux中软链接与硬链接的作用、区别、创建、删除

1、软链接与硬链接的作用 (1)软链接 软链接是Linux中常用的命令,它的功能是某一文件在另外一个位置建立一个同步的链接,相当于C语言中的指针,建立的链接直接指向源文件所在的地址,软链接不会另外占用资源,当同一文件需要在多个位置被用到的时候,就会使用到软连接。 …

CSS 响应式设计:Viewport

文章目录 什么是 Viewport?设置 Viewport示例1,没有添加 viewport2,添加 viewport 什么是 Viewport? Viewport 是一个用于在各种设备(如手机、平板电脑、桌面等)上创建和渲染 Web 页面的容器。在设计和开发响应式网站时&#x…

机器视觉应用系统包括哪些硬件?

导语:机器视觉是一个软硬件相结合的综合技术,需要软件对图像做处理,也需要硬件提供稳定和高质量的图像,两者同样重要。作为开发,软件模块比较熟悉,硬件系统的相关知识储备弱一些,本文对机器视觉…