C++OpenCV基于Camshift实现颜色范围内的车辆跟踪
基本概念
camshift("continuously adaptive mean-shift"的缩写),即连续自适应的 算法。其基本思想是对视频序列的所有图像帧都作MeanShift运算,并将上一帧的结果(即搜索窗口的中心位置和窗口大小)作为下一帧MeanShift算法的搜索窗口的初始值,如此迭代下去。简单点说,meanShift是针对单张图片寻找最优迭代结果,而camShift则是针对视频序列来处理,并对该序列中的每一帧图片都调用meanShift来寻找最优迭代结果。正是由于camShift针对一个视频序列进行处理,从而保证其可以不断调整窗口的大小,如此一来,当目标的大小发生变化的时候,该算法就可以自适应地调整目标区域继续跟踪。算法基本步骤:
- 初始化搜索窗
- 计算搜索窗区域的颜色概率分布(反向投影)
- 运行mean-shift算法,得到搜索窗新的大小和位置。
- 在下一帧视频图像中用步骤3中的值重新初始化搜索窗的大小和位置,继续从步骤2执行。
示例演示
在OpenCV自带的camShift的例子当中,是通过计算目标在HSV空间下的H分量直方图,通过直方图反向投影得到目标像素的概率分布,然后通过调用OpenCV的CAMSHIFT算法,自动跟踪并调整目标窗口的中心位置与大小。该算法对于简单背景下的单目标跟踪效果较好,但如果被跟踪目标与背景颜色或周围其它目标颜色比较接近,则跟踪效果较差。另外,由于采用颜色特征,所以它对被跟踪目标的形状变化有一定的抵抗能力。
完整代码
#include <iostream>
#include <opencv2/opencv.hpp&
C++OpenCV基于Camshift实现颜色范围内的车辆跟踪相关推荐
- OpenCV基于颜色信息的车牌提取
OpenCV基于颜色信息的车牌提取 车牌提取的方法主要有:基于纹理特征分析法.基于数学形态学分析法.基于边缘检测的定位分析法.基于小波分析的定位分析法.基于彩色信息的定位分析法,本文采用的方法是基于颜 ...
- C++ OpenCV 基于HSV颜色分割区域、获取目标
C++ OpenCV 基于HSV颜色分割区域.获取目标 读取图片 // An highlighted block Mat img = imread("E:/Data_image/螺丝-线1/ ...
- opencv中直方图和颜色跟踪相关:calcHist, calcBackProject, Meanshift和Camshift
1. 理解calcHist的应用 1)单通道hist calcHist比较好理解,就是计算 图像的直方图,单通道来说就是 灰度的分布 比如下图是灰度像素的分布,在0-255的灰度图上划分为若干个bin ...
- OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
OpenCV学习笔记(十六)--CamShift研究 CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算 ...
- 【opencv】Camshift目标跟踪
Camshift原理 CamShift算法的全称是"Continuously Adaptive Mean-SHIFT",即:连续自适应的MeanShift算法.其基本思想是对视频序 ...
- python更改图片中物体的颜色_Python Opencv提取图片中某种颜色组成的图形的方法...
Python Opencv提取图片中某种颜色组成的图形的方法 主要目标识别图中红色的裂缝,尝试了几种不同的方法,最后发现比较每一点的RGB差值可以很好的解决这个问题,也就是提取图片中的红色相关信息.处 ...
- OpenCV(Python)颜色识别(一)
1. 基本原理 1.1 彩色模型 数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型.而 ...
- 基于物体颜色的目标检测与跟踪
目录 一.项目内容 二.项目分析 三.主要使用模块 四.选用HSV颜色空间 五.代码实现与分析 1. 颜色选择器: 2. 实现检测并跟踪绘制移动轨迹: 六.测试结果 一.项目内容 (1)利用摄像头,根 ...
- 基于HSI空间颜色三角形的边缘检测方法
基于HSI空间颜色三角形的边缘检测方法 摘 要:利用像素点的颜色坐标H.S.I构建像素的颜色三角形,计算该三角形的面积和边长.根据面积以及边长的差值确定该像素点是否为彩色图像的边缘点.这种边缘检测方法 ...
最新文章
- 我以前一直没有真正理解支持向量机,直到我画了一张图!
- [PyTorch]一个非常好的抢救outofmemory的方法
- 高配人生背后:25岁前最该看透的事儿
- windows下的结束标志
- NO4 findmv--特殊符号..和.
- .NET、C#和ASP.NET三者之间的区别与联系
- dart参数传方法_Flutter必备Dart语言快速入门
- 想去三亚旅游,有什么好的景点推荐吗?
- java dom4j api_详解Java解析XML的四种方法(推荐使用DOM4J,因为for Java)
- MATLAB下载教程
- html新的页面打开新页面,javascript如何打开新窗口?
- MCMC抽样与LDA参数求解
- 双网卡双线路DNS解析分析
- php 360kan 抓取,米酷MKCMS自动采集360kan影视站6.2.6无授权版
- 德国华人餐饮外卖的春天?
- Linux rar 压缩 解压文件
- SQL SERVER学习记录
- linux 64位数据库下载地址,Linux 7 平台 64位 DM8(8.1.0.147) 安装文件下载地址
- Spring Boot CORS跨域资源共享实现方案
- 【BOOST C++字串专题11】Boost.Spirit(一)
热门文章
- Hr面的经验和反问怎么问
- 【阿朱标红】参与感(2):品牌篇
- Android--- 筛选框需求(1)房产类APP条件筛选框,包含区域(单选,多选),竖着排列(单选,多选),横向排列(单选,多选)
- java 渐变橡皮擦_java 的画板上面的一个橡皮檫功能
- 艾默生流量计的适用条件
- java int除以int_转:int整数除以int整数一定得到的是int整数(易忽视)
- 论文笔记:Deeply-Learned Part-Aligned Representations for Person Re-Identification
- mysql查询时不区分全半角_SQL查询语句区分大小写、全角半角
- 打造自己的Web IDE(在线开发环境)
- 全网最简单的最便宜的电子工资条发放方法