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

技术标签: opencv 图像上画出目标运动的轨迹  

基于均值迁移的对象移动分析(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函数设置亮度阈值

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

# 将低于和高于阈

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36054993/article/details/114354105

智能推荐

一站式在线协作开源办公软件ONLYOFFICE,协作更安全更便捷_在线office 开源-程序员宅基地

文章浏览阅读3.6w次,点赞151次,收藏134次。一站式在线协作办公软件ONLYOFFICE,协作更便捷_在线office 开源

Qt for Windows:Qt 5.6.0 MinGW 静态编译版本制作_qt5.6.0mingw版-程序员宅基地

文章浏览阅读2.9w次,点赞10次,收藏39次。本文将讲述如何在Windows系统中,Qt源码,编译并且安装,以制作出一个可以一键静态编译Qt版本我使用的环境是:Windows10 64位 专业版Qt使用的是:Qt 5.6.0 for Android (Windows 32-bit, 1.1 GB)Qt 5.6.0 for Windows 32-bit (MinGW 4.9.2, 1.0 GB) 也是可以的大_qt5.6.0mingw版

BUUCTF reverse题解汇总-程序员宅基地

文章浏览阅读7.1k次,点赞7次,收藏33次。BUUCTF平台刷题过程中做的一些逆向题解的总结归类_buuctf reverse题解

辩论opener_您应该学习辩论的第一门编程语言-程序员宅基地

文章浏览阅读141次。辩论openerJS v Python… the final showdownJS v Python…最后的决战At this point there can be no doubt if you are in the tech world you have heard of both of these popular languages. Maybe if you are just start..._辩论的opener

渗透之入门准备(一)菜鸟经验_星语惜馨_新浪博客-程序员宅基地

文章浏览阅读260次。你以为这节课是vm,想太多了,怎么可能如你所愿(这节是专业知识,可以跳过)1.对于一个开始对网络安全感兴趣的脚本小子,如何入门是一件繁琐而且要碰壁很多次的事情,所以为了给后人能够开始了解,我这个菜鸟就跟大家说一下我的个人经验。(大神不喷)---很多东西估计都不懂,只是先给大家了解一下。最好就在虚拟机搭建。2.首先没有授权就对网站渗透是违法的事情,最好就自己搭建环境进行渗透,此次就以用..._网络渗透菜鸟教程

nyoj 132-最长回文子串_第一行输入一个字符串s,s的长度小于等于5000大于等于1-程序员宅基地

文章浏览阅读656次。http://acm.nyist.net/JudgeOnline/problem.php?pid=132最长回文子串时间限制:1000 ms | 内存限制:65535 KB难度:4描述输入一个字符串,求出其中最长的回文子串。子串的含义是:在原串连续出现的字符串片段。回文的含义是:正着看和倒着看是相同的,如abba和abbebba。在判断是要求忽略_第一行输入一个字符串s,s的长度小于等于5000大于等于1

随便推点

软件开发工具【十四】 之 常用建模工具_建模工具开发学习-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏11次。感谢内容提供者:金牛区吴迪软件开发工作室接上一篇:软件开发工具【十三】 之 Eclipse插件的使用与开发文章目录一、UML建模介绍1.面向对象方法的出现和发展2.面向对象的一些概念3.面向对象方法的基本过程4.组件思想二、RATIONAL ROSE建模工具介绍1.RATIONAL 公司简介2.面向对象的分析设计和Rational Rose3.Rational Rose可视化建模的特点三、使用RATIONAL ROSE 建模1.UML建模的三大部分2.需求分析之用例图与活动图3.系统分析与设计四、E._建模工具开发学习

如何通过gdb查看反汇编代码_pwngdb 显示汇编代码-程序员宅基地

文章浏览阅读2.4w次,点赞15次,收藏77次。0x00 程序源码C代码如下:#include <stdio.h>int addme(int a, int b){ int c ; c = a+ b; return c;}int main(int argc, char const *argv[]){ int ret= 0; ret = addme(10,20); pri..._pwngdb 显示汇编代码

View的简介_view在编程中什么意思-程序员宅基地

文章浏览阅读1.6w次,点赞17次,收藏34次。认识一个新的事物,首先我们从概念上讲,我们需要知道,这个事物 是什么,这个事物有什么用途?对应到View 上,我们要搞明白 View 的定义以及工作原理。 1.View是什么? View是屏幕上的一块矩形区域,它负责用来显示一个区域,并且响应这个区域内的事件。可以说,手机屏幕上的任意一部分看的见得地方都是View,它很常见,比如 TextView 、ImageView 、Button_view在编程中什么意思

ES 内存使用和GC指标_es gc count多少算异常-程序员宅基地

文章浏览阅读3k次。摘录自:http://blog.csdn.net/yangwenbo214/article/details/74000458ES 内存使用和GC指标——主节点每30秒会去检查其他节点的状态,如果任何节点的垃圾回收时间超过30秒(Garbage collection duration),则会导致主节点任务该节点脱离集群。内存使用和GC指标在运行Elasticsearch时,内存是您..._es gc count多少算异常

【UML】——活动图-程序员宅基地

文章浏览阅读5.8w次,点赞25次,收藏96次。一、活动图概述1、流程图:常被用来建立算法模型,使用流程图可以表示一个算法的执行序列、过程、判定点、分支和循环 活动图和流程图十分类似,不同之处在于它支持并行活动 活动图的缺点:很难清楚的描述动作与对象之间的关系,没有交互图直接2、活动图作用描述一个操作的执行过程中所完成的工作或 者动作 描述对象内部的工作 显示如何执行一组相关的动作,以及这些动作如何影响周围对象 描..._活动图

Java并发编程:第七章 并发工具类_java并发编程的类-程序员宅基地

文章浏览阅读1.2k次,点赞32次,收藏11次。在Java并发框架中,Exchanger 是一个同步点,它允许一对线程在一个点上交换对象。Exchanger 非常适合于两个线程需要相互传递数据或信息的场景,例如遗传算法中的配对交叉操作,或者流水线设计中两个工作阶段的交互。让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBrrier的await方法。信号量主要用于两个目的,一个是用于多个共享资源的互斥使用,另外一个用于并发线程的控制。_java并发编程的类