opencv 图像上画出目标运动的轨迹_OpenCV视频分析-Meanshift、Camshift&运动轨迹绘制...

本文介绍了如何使用OpenCV的Mean Shift和Cam Shift算法来跟踪目标并绘制其运动轨迹。通过直方图反向投影、均值迁移和连续自适应均值迁移,实现对视频中目标的精确跟踪,同时展示了在Python中应用这些算法的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于均值迁移的对象移动分析(Meanshift)

✏️ ⛳️

概述

本质:

✔️ Mean Shift均值漂移算法是无参密度估计理论的一种,无参密度估计不需要事先知道对象的任何先验知识,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。

直观的理解:

✔️ 一堆点集,一个圆形的窗口在不断的移动,移动的方向是沿着点的密度最大的区域移动,图示如下:

均值迁移

函数在OpenCV里使用均值平移,首先需要设置目标,找到它的直方图,这样我们可以为了计算均值平移向后投影目标到每一帧上,同时也需要提供窗口的初始位置。

对于直方图,只考虑色调(H),要避免低光线带来的错误值,低光线的值使用 cv2.inRange() 函数来丢弃掉。

ret, track_window = cv2.meanShift(probImage, window, criteria )输入值probImage --> 输入图像,是直方图反向投影的结果

window --> 搜索窗口,ROI对象区域

criteria --> 均值迁移停止条件返回值ret --> 返回迭代次数

track_window --> 返回迭代后的窗口

示例代码

import cv2 as cv

cap = cv.VideoCapture('test.mp4')

# 读取第一帧

ret,frame = cap.read()

cv.namedWindow("Demo", cv.WINDOW_AUTOSIZE)

# 可以在图片上选择roi区域

x, y, w, h = cv.selectROI("Demo", frame, True, False)

track_window = (x, y, w, h)

# 获取ROI直方图

roi = frame[y:y+h, x:x+w]

hsv_roi = cv.cvtColor(roi, cv.COLOR_BGR2HSV)

# inRange函数设置亮度阈值

# 去除低亮度的像素点的影响

# 将低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值