基于opencv的多目标物体跟踪!走到哪跟到哪!

树莓派视觉小车 -- 物体跟踪(OpenCV) 一、物体跟踪效果展示 阅读详情

 

基础博客

请参考我的基于opencv模板匹配的单物体跟踪,基本原理相同,增加了矩阵记录多目标的位置信息等。

代码

import cv2 as cv2
import numpy as np
from subprocess import call


def template_demo(tpl, target, method = cv2.TM_CCORR_NORMED):
    th, tw = tpl.shape[:2]# 取高宽,不取通道 模板高宽
    result = cv2.matchTemplate(target, tpl, method)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 寻找最小值,最大值。最小值位置,最大值位置
    tl = max_loc
    br = (tl[0]+tw, tl[1]+th)
    print(max_val, tl, br)
    if max_val < 0.45:
        lost = 1
    else:
        lost = 0
    return tl, br, lost



if __name__ == '__main__':

    number = int(input('please input the number of objects: '))
    area = np.zeros((number, 4))
    ROI_area = np.zeros((number, 4))
    print(area.shape)
    print("--------- Python OpenCV Tutorial ---------")
    cap = cv2.VideoCapture('../robot.mp4')
    ret, frame = cap.read()
    original_frame = frame
    print(frame.shape)
    lam = 1
    fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 保存视频的编码
    out = cv2.VideoWriter('football_output.avi',fourcc, 20.0, (frame.shape[1], frame.shape[0]))
    for i in range(number):
        gROI = cv2.selectROI("ROI frame", frame, False)
        ROI_area[i] = [gROI[1], gROI[1]+gROI[3], gROI[0], gROI[0]+gROI[2]]
        # ROI = frame[gROI[1]: gROI[1]+gROI[3], gROI[0]:gROI[0]+gROI[2], :]
        area[i] = [0, frame.shape[1], 0, frame.shape[0]]
    print(area)
    print(ROI_area)
    while True:
        ret, frame = cap.read()
        if ret:
            for k in range(number):
                ROI = original_frame[int(ROI_area[k, 0]): int(ROI_area[k, 1]), int(ROI_area[k, 2]):int(ROI_area[k,3]), :]
                frame1 = frame[int(area[k, 2]):int(area[k, 3]), int(area[k, 0]):int(area[k, 1]), :]
                tl, br, lost = template_demo(ROI, frame1, method=cv2.TM_CCOEFF_NORMED)
                if lost==1:
                    lam = 2
                else:
                    lam = 1
                # ROI = frame1[tl[1]:br[1], tl[0]:br[0], :]
                cv2.imshow('ROI', ROI)
                print(ROI.shape)
                result = cv2.rectangle(frame, (int(area[k, 0])+tl[0], int(area[k, 2])+tl[1]), (br[0]+int(area[k, 0]), br[1]+int(area[k, 2])), (k*20, k*10, 255//(k+1)), 2)
                

                area[k, 0] = (tl[0] + br[0]) // 2 - lam * (br[0] - tl[0]) + area[k, 0]
                area[k, 1] = (tl[0] + br[0]) // 2 + lam * (br[0] - tl[0]) + area[k, 0]
                area[k, 2] = (tl[1] + br[1]) // 2 - lam * (br[1] - tl[1]) + area[k, 2]
                area[k, 3] = (tl[1] + br[1]) // 2 + lam * (br[1] - tl[1]) + area[k, 2]
                area[k, 0] = 0 if area[k, 0] < 0 else area[k, 0]
                area[k, 1] = frame.shape[1] if area[k, 1] > frame.shape[1] else area[k, 1]
                area[k, 2] = 0 if area[k, 2] < 0 else area[k, 2]
                area[k, 3] = frame.shape[0] if area[k, 3] > frame.shape[0] else area[k, 3]

            out.write(result)
            cv2.waitKey(18)
            cv2.imshow('result', result)
        else:
            break
        
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
        
    cap.release()
    cv2.destroyAllWindows()
    command = "ffmpeg -i football_output.avi football_output.mp4"
    call(command.split())

展示

 

后记

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

 

OpenCV-物体跟踪 物体跟踪是指在视频序列中,对某一特定物体进行持续定位的过程。它通常涉及在视频的第一帧中手动或自动选择目标物体,然后在后续帧中跟踪该物体的位置和运动轨迹。 阅读详情

相关推荐

基于opencv模板匹配的单目标跟踪

基于模板的物体跟踪模板匹配核心函数完整代码效果展示 模板匹配 调用函数: cv.matchTemplate(image, templ, method, result=None, mask=None) image: 输入图片1,图中包含模板的完整图片; templ: 输入图片2,模板图片。size必须小于image; method:采用何种匹配方式; result:比较结果的映射图像,必须是单通道32位浮点格式,一般不设置; mask: 搜索模板的mask(不知道咋翻译会好一点),它必须与templ具有相同

留缘的博客 3691

基于opencv的多目标跟踪

这里写目录标题基础博客代码展示 基础博客 请参考我的基于opencv模板匹配的单物体跟踪,基本原理相同,增加了矩阵记录多目标的位置信息等。 代码 import cv2 as cv2 import numpy as np from subprocess import call def template_demo(tpl, target, method = cv2.TM_CCORR_NORMED): th, tw = tpl.shape[:2]# 取高宽,不取通道 模板高宽 result =

留缘的博客 1486

OpenCV 物体跟踪

文章目录声明正文1.明确任务2.需要用到的知识3.代码分析4.示例5.另外感谢观看! 声明 正文 1.明确任务 2.需要用到的知识 3.代码分析 4.示例 5.另外 感谢观看!

冰冰bing的博客 2202

如何使用OpenCV进行目标检测和跟踪?

使用OpenCV进行目标检测和跟踪的常见方法是使用Haar Cascade分类器进行对象检测,使用OpenCV的目标跟踪API进行目标跟踪。

m0_60720471的博客 4126

基于OpenCV的物体跟踪:CSRT算法

实时摄像头视频捕获用户交互式选择跟踪目标(ROI)使用CSRT算法进行目标跟踪实时显示跟踪结果通道可靠性:利用颜色通道的可靠性信息空间可靠性:考虑目标的空间分布判别式相关滤波:使用相关滤波进行目标定位高精度:相比KCF等算法,CSRT通常能提供更精确的跟踪结果较高计算成本:精度提升带来的是稍高的计算开销本文介绍了一个基于OpenCV的CSRT跟踪器的实时目标跟踪系统实现。通过这个简单的示例,读者可以了解目标跟踪的基本原理和实现方法。

zdx2585503940的博客 2254

SORT 多目标跟踪算法+opencv模板匹配算法实战——多个小球跟踪,以及演示视频

sort跟踪算法+opencv模板匹配实现小球跟踪实现结果rgb灰度图像假彩色二值化,提取坐标 实现结果 先把最终结果放上来,如果感觉还可以的话,请在下方留言,到时候再放上代码。 rgb sort+模板匹配实现多目标跟踪 灰度图像假彩色 sort+模板匹配实现多目标跟踪

留缘的博客 4939

python+opencv目标跟踪

test1.py import cv2 """ 背景和需要跟踪的物体差异很大 """ # 获取视频 video = cv2.VideoCapture('../opencv/20210423_164452.mp4') # 生成椭圆结构元素 es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4)) # 设置背景帧 background = None while True: # 读取视频每一帧 ret, frame = vide

sdhdsf132452的博客 786

Python的opencv库进行物体跟踪

然后,我们初始化了一个Boosting目标跟踪器,并从视频的第一帧中选择一个ROI作为初始跟踪框。接下来,在循环中,我们读取每一帧,并使用跟踪器来跟踪目标。在这个示例代码中,我们打开了一个视频,并使用 cv2.selectROI() 方法在第一帧图像中选择了一个跟踪目标的区域,然后根据该区域提取了一个直方图,作为均值漂移算法的输入。在 Python 中使用 OpenCV 进行物体跟踪,可以使用一些已经实现好的算法,例如均值漂移(MeanShift)算法和卡尔曼滤波(Kalman Filter)算法。

zhangzhechun的专栏 1727

[OpenCV实战]16 使用OpenCV实现多目标跟踪

目录 1 背景介绍 2 基于MultiTracker的多目标跟踪 2.1 创建单个对象跟踪器 2.2 读取视频的第一帧 2.3 在第一帧中确定我们跟踪的对象 2.4 初始化MultiTrackerer 2.5 更新MultiTracker和显示结果 3 结果和代码 4 参考 在这篇文章中,我们将介绍如何在OpenCV中使用MultiTracker类实现多目标跟踪API。在深入了...

You and Me 1万+

实战OpenCV之物体跟踪

与传统的跟踪方法相比,基于Transformer的跟踪器可以在复杂的场景下保持较高的跟踪精度,并且对遮挡、光照变化和尺度变化等情况具有更好的鲁棒性。特别是近年来,随着深度学习技术的发展,基于深度学习的物体跟踪方法已经取得了显著的进步,并在许多实际应用中取得了非常好的效果。参数image为输入的图像,参数boundingBox为目标物体的位置和大小,跟踪后会被更新。下面的实战代码实现了一个基于TrackerVit的物体跟踪应用,可以选择从视频文件或摄像头实时捕获视频流,并对选定的目标进行跟踪。

hope_wisdom的技术博客 3646

【opencv项目实战】目标跟踪

在本文中,我们介绍了如何使用C++、python、OpenCV实现目标跟踪功能。

qq_41454577的博客 2326

OpenCV快速入门:移动物体检测和目标跟踪

本文将介绍使用OpenCV进行移动物体检测和目标跟踪的基础知识,包括各种算法的原理、公式和实际代码实现。我们将从移动物体检测的基本概念开始,深入探讨不同类型的目标跟踪方法,如基于模板、特征、密度、模型和学习的跟踪技术。

吾家有猫名探花的博客 2万+

基于Python和OpenCV的Meanshift物体跟踪实现

物体跟踪作为计算机视觉和模式识别领域中的一个重要研究方向,其任务是自动检测和跟踪视频中感兴趣的目标,如人物、车辆或特定物体。随着技术的发展,物体跟踪已广泛应用于安防监控、人机交互、无人驾驶、智能视频分析等领域。跟踪的算法与技术也在不断创新,如卡尔曼滤波、光流法、特征匹配、深度学习等,其中Meanshift算法作为非参数密度估计的一种方法,因其实现简单、效果显著在很多场景中得到了广泛的应用。接下来,我们将深入探讨Meanshift算法的理论基础、实现细节以及在实际项目中的应用和优化策略。

weixin_42605397的博客 1257

OpenCV物体跟踪:从理论到实战的全面解析

​一、引言​在计算机视觉的广阔领域中,物体跟踪技术宛如一颗璀璨的明星,散发着独特的魅力与价值,发挥着举足轻重的作用。它致力于在连续的图像帧或视频序列里,精准识别并持续定位特定的目标物体,这一过程看似简单,实则蕴含着高度的复杂性和挑战性 ,涉及到众多学科领域的知识交叉融合。​物体跟踪的应用场景极为广泛,几乎渗透到了我们生活的方方面面,在众多关键领域都扮演着不可或缺的角色。在自动驾驶领域,它是保障车辆安全、高效行驶的核心技术之一。通过实时、精准地跟踪周围车辆、行人以及各种交通标识的位置和运动状态,自动驾驶系统能

2302_76568160的博客 1191

HRNet 【demo 复现过程】

Deep High-Resolution Representation Learning for Human Pose Estimation

qq_45257495的博客 5556

【CubeMX】STM32G474 HRTIM 死区时间与互补PWM实战解析

本文深入解析STM32G474的HRTIM高分辨率定时器在互补PWM生成与死区时间配置中的应用。通过CubeMX工具详细演示时钟配置、单路PWM基础、互补输出与死区时间设置,并结合逆变器等电力电子实战案例,帮助开发者避免直通风险,优化系统性能。

efc12345678的博客 746

终极指南:如何使用 opencv4nodejs 实现多目标实时物体跟踪

在当今的计算机视觉应用中,**多目标实时物体跟踪**是一个至关重要的技术,它能够同时追踪视频流中的多个物体,广泛应用于智能监控、自动驾驶、运动分析等领域。opencv4nodejs 作为 Node.js 平台的 OpenCV 绑定库,为开发者提供了强大的图像处理和视频分析能力。本文将带你深入了解如何利用这个强大的工具实现高效的多目标跟踪系统。 ## 🎯 什么是多目标实时物体跟踪? **多目标

gitblog_00887的博客 615

在安装之后使用labelme出现qtpy.PythonQtError:No Qt bindings could be found错误

我在base环境(python3.7)可成功安装和使用labelme,而在同py37版本和py36的虚拟环境中可安装labelme包,但在使用的时候出现报错,如下: 我尝试着去解决第一个错误提示,错误提示为:moduleNotFoundError:No module named ‘PySide’,结果掉入了一个无止无尽的坑,看到网上有朋友说这个只能在py27-py35才能安装,还有说需要VC+ 140等,他们说的这个解决方案只针对于这个缺包的描述,而我们仅仅只需要一个labelme,因此我直接对后面的错误

qq_33538651的博客 9815

OpenCv高阶(十一)——物体跟踪

物体跟踪是在视频序列或图像流中持续监测和定位特定物体的过程。通过分析相邻帧之间物体的特征和位置变化,实现对物体运动的跟踪。1、BOOSTING 跟踪器原理:基于 AdaBoost 算法,通过迭代训练多个弱分类器并组合成强分类器。在跟踪过程中,不断利用样本更新分类器,以区分目标和背景。特点:精度较低,在目标外观变化、光照变化或存在遮挡时,容易丢失目标。计算速度较慢,实时性较差。对目标外观变化的适应性较弱。适用场景:适用于目标外观相对稳定、光照变化小且对精度要求不高的简单场景。

jdjhcn的博客 1823

基于PID算法的循迹小车

这一期为创客们带来基于PID算法的循迹小车制作 1.标准赛道示意图: (该赛道包含了:左直角、右直角、十字路口等路况) 2.灰度传感器安装示意图: (可根据实际情况调节各传感器之间的间距) 3.硬件原理图: 4.控制逻辑: 5.程序如下: #define leftA_PIN 7 #define leftB_PIN 6 #define left_Pwm_PIN 5 #define STBY...

qq_44343584的博客 4万+

【异常】解决 Claude Code 及第三方插件提示 “API Error: 404“ 的配置修复指南

在使用 Claude 相关的 CLI 工具(如)或 IDE 插件进行开发辅助时,配置错误的模型参数是导致连接失败的常见原因。本文将针对这一典型报错进行复盘与解决。

奶爸的编程之路,也就一周冷个三天 7747

进阶OpenCV --视频物体跟踪

KCF 跟踪器是一种基于相关滤波的判别式跟踪算法,它将目标跟踪问题转化为 “区分目标与背景” 的二分类问题,通过核函数处理非线性特征,实现对目标的快速定位与尺度适应。

2302_76756558的博客 1304

secureCRT 破解方法

3、输入注册信息打开keygen.exe,点击path,选择SecureCRT的安装目录(例如D:\VanDykeSoftware\Clients)的securecrt.exe打开,继续下一步打开LicenseHelper.exe,如下。1、注册SecureCRT9.1打开keygen.exe,出现以下问题(没有关掉安全防护,一双击打开,Windows会自动识别keygen.exe为bingdu并删除)打开桌面SecureCRT,此界面不输入内容,直接点击下一步。2、存储配置文件夹(可以默认安装)

逆水行舟 1万+
上一篇: 让Python在后台自动解压各种压缩文件!自动化就是好!
下一篇: Python分析5000+抖音大V,发现大家都喜欢这类视频!
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值