OpenCV学习笔记(十六)——CamShift研究

CamShitf算法,即Continuously Apative Mean-Shift算法,基本思想就是对视频图像的多帧进行MeanShift运算,将上一帧结果作为下一帧的初始值,迭代下去。基本步骤为:

1.选取关键区域

2.计算该区域的颜色概率分布--反向投影图

3.用MeanShift算法找到下一帧的特征区域

4.标记并重复上述步骤

该算法的关键就是可以在目标大小发生改变的时候,可以自适应的调整目标区域继续跟踪

在进行CamShitf和MeanShift算法的时候,需要输入反向投影图,这就要求有个很重要的预处理过程是计算反向投影图。对应的函数为calcBackProject。所谓反向投影图就是一个概率密度图。calcBackProject的输入通常为目标区域的直方图和待跟踪图像的直方图,输出与待跟踪图像大小相同,每一个像素点表示该点为目标区域的概率。这个点越亮,该点属于物体的概率越大。这样的输入参数太适合做MeanS算法了。关于反向直方图,可以参考一下这篇文章http://blog.163.com/thomaskjh@126/blog/static/370829982010112810358501/

具体代码如下:

[cpp] view plain copy
  1. calcHist(&roi, 1, 0, maskroi, hist, 1, &hsize, &phranges);
  2. calcBackProject(&hue, 1, 0, hist, backproj, &phranges);
  3. backproj &= mask;
  4. RotatedRect trackBox = CamShift(backproj, trackWindow,
  5. TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ));

OpenCV学习笔记(十七)——运动分析和物体跟踪Video

这个库中相关的函数有calcOpticalFlowPyrLK、calcOpticalFlowFarneback、estimateRigidTransform、updateMotionHistory、calcMotionGradient、calcGlobalOrientation、segmentMotion、CamShift、meanShift;还有卡尔曼滤波器类KalmanFilter,类内成员函数有构造函数、init、predict、correct。背景单元类BackgroundSubtractor,包括运算符重载,getBackgroundImage,其派生类BackgroundSubtractorMOG和BackgroundSubtractorMOG2,以及只支持Python版本的函数CalcOpticalFlowBM、CalcOpticalFlowHS,c版本的函数cvCalcOpticalFlowLK

这些函数每一个背后几乎都是一篇论文,很多都是经典的方法,我才疏识浅,只能边学边总结,先介绍一些我用过的函数,待日后陆续补充

calcOpticalPlowPyrLK是利用Lucas-Kanade方法计算图像的光流场

OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc

imgproc是OpenCV一个比较复杂的lib,我是分开介绍的,之前介绍过了滤波器、直方图、结构分析和形状描述三节,这次介绍一下图像的变换,OpenCV对于图像的变换又可分为几何变换和其他的变换,我这节先介绍一下其他的变换。

这部分的函数包括adaptiveThreshold,对图像进行自适应的阈值操作。

相应的也有更一般常用的阈值操作函数threshold。

这里还是详细介绍一下cvtColor,这个函数是用来进行颜色空间的转换,随着OpenCV版本的升级,对于颜色空间种类的支持也是越来越多。这里汇总一下,把我知道的全部空间列举出来,也许还不完整,希望大家补充。需要先告诉大家的是OpenCV默认的图片通道是BGR。

RGB <--> BGR:CV_BGR2BGRA、CV_RGB2BGRA、CV_BGRA2RGBA、CV_BGR2BGRA、CV_BGRA2BGR

RGB <--> 5X5:CV_BGR5652RGBA、CV_BGR2RGB555、(以此类推,不一一列举)

RGB <---> Gray:CV_RGB2GRAY、CV_GRAY2RGB、CV_RGBA2GRAY、CV_GRAY2RGBA

RGB <--> CIE XYZ:CV_BGR2XYZ、CV_RGB2XYZ、CV_XYZ2BGR、CV_XYZ2RGB

RGB <--> YCrCb(YUV) JPEG:CV_RGB2YCrCb、CV_RGB2YCrCb、CV_YCrCb2BGR、CV_YCrCb2RGB、CV_RGB2YUV(将YCrCb用YUV替代都可以)

RGB <--> HSV:CV_BGR2HSV、CV_RGB2HSV、CV_HSV2BGR、CV_HSV2RGB

RGB <--> HLS:CV_BGR2HLS、CV_RGB2HLS、CV_HLS2BGR、CV_HLS2RGB

RGB <--> CIE L*a*b*:CV_BGR2Lab、CV_RGB2Lab、CV_Lab2BGR、CV_Lab2RGB

RGB <--> CIE L*u*v:CV_BGR2Luv、CV_RGB2Luv、CV_Luv2BGR、CV_Luv2RGB

RGB <--> Bayer:CV_BayerBG2BGR、CV_BayerGB2BGR、CV_BayerRG2BGR、CV_BayerGR2BGR、CV_BayerBG2RGB、CV_BayerGB2RGB、 CV_BayerRG2RGB、CV_BayerGR2RGB(在CCD和CMOS上常用的Bayer模式)

YUV420 <--> RGB:CV_YUV420sp2BGR、CV_YUV420sp2RGB、CV_YUV420i2BGR、CV_YUV420i2RGB

还有函数distanceTransform,是用来计算各像素距离最近的零像素距离的。

floodFill函数用来用指定颜色填充一个连通部件。

inpaint函数用来用附近区域信息重建选中区域,可以对图像里由于传输噪声丢失的块进行重建。

integral函数用来获得图像的积分值。

寻找边界使用分水岭分割办法的函数watershed。

对图像进行GrabCut算法的grabCut函数(有待研究,不熟悉)。

总之,这些变换千奇百怪,不是很系统,常用的还是我先介绍的几个,比如threshold、cvtColor。就这样吧,以后有收获再陆续补充。

OpenCV学习笔记(十九)——浅尝contrib

contrib为最新贡献但不是很成熟的函数库。作为最新的东西,就更有价值进行庖丁解牛了,我来也。

首先介绍一个CvAdaptiveSkinDetector类。该类的功能是自适应的皮肤检测。分析了一下代码,其构造函数的输入参数有两个,samplingDivider样本分类,morphingMethod为变形方法。该类的关键函数为process函数,该函数先将输入图像由RGB转换为HSV空间,Hue的范围是3~33,Intensity(V)的范围为15~250。然后进行必要的腐蚀膨胀,去除噪声,使轮廓更加清晰平滑。具体的使用代码参考sample文件夹中的adaptiveskindetector.cpp

OpenCV学习笔记(二十)——手势识别

最近也在玩手势识别,资料找了很多,基本可以分为静态手势识别和动态手势识别,先弄个简单的静态手势识别给大家看看。

基本流程如下:

先滤波去噪-->转换到HSV空间-->根据皮肤在HSV空间的分布做出阈值判断,这里用到了inRange函数,然后进行一下形态学的操作,去除噪声干扰,是手的边界更加清晰平滑-->得到的2值图像后用findContours找出手的轮廓,去除伪轮廓后,再用convexHull函数得到凸包络。

结果如下:

源代码下载位置:http://download.csdn.net/detail/yang_xian521/3746669,有点贵哦,当时随便设了个值,呵呵

from: http://blog.csdn.net/yang_xian521/article/category/910716

OpenCV学习笔记(十六)——CamShift研究 OpenCV学习笔记(十七)——运动分析和物体跟踪Video OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc相关推荐

  1. 树莓派视觉小车 -- 物体跟踪(OpenCV)

    目录 物体跟踪效果展示 过程: 一.初始化 二.运动控制函数 三.舵机角度控制 四.摄像头&&图像处理 1.打开摄像头 2.把图像转换为灰度图 3. 高斯滤波(去噪) 4.亮度增强 5 ...

  2. MATLAB应用实战系列(七十六)-【仿真应用】卡尔曼滤波在雷达目标跟踪中的应用仿真(附matlab代码)

    1 模型 目标跟踪问题的应用背景是雷达数据处理,即雷达在搜索到目标并记录目标的位置数据,对测量到的目标位置数据(称为点迹)进行处理,自动形成航迹,并对目标在下一时刻的位置进行预测.本文简要讨论了用Ka ...

  3. OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope

    OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...

  4. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的实践-高斯牛顿法和曲线拟合

    专栏系列文章如下: 视觉SLAM十四讲学习笔记-第一讲_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习笔记-第二讲-初识SLAM_goldqiu的博客-CSDN博客 视觉SLAM十四讲学习 ...

  5. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理

    第六讲学习笔记如下: 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题_goldqiu的博客-CSDN博客 ​​​​​​视觉SLAM十四讲学习笔记-第六讲-非线性优化的非线性最小二乘问题_ ...

  6. 第十六届全国大学生智能车竞赛创意组-讯飞智慧餐厅

    竞赛正式文档可以在全国大学生智能车竞赛网站下载:https://smartcar.cdstm.cn 第十六届全国大学生智能车创意组包括有三个组别: 第十六届全国大学生智能汽车竞赛创意组-百度智慧交通 ...

  7. 第十六届全国大学生智能车竞赛创意组别-航天智慧物流

      竞赛正式文档可以在全国大学生智能车竞赛网站下载:https://smartcar.cdstm.cn 第十六届全国大学生智能车创意组包括有三个组别: 第十六届全国大学生智能汽车竞赛创意组-百度智慧交 ...

  8. 卷积核和全连接层的区别_「动手学计算机视觉」第十六讲:卷积神经网络之AlexNet...

    前言 前文详细介绍了卷积神经网络的开山之作LeNet,虽然近几年卷积神经网络非常热门,但是在LeNet出现后的十几年里,在目标识别领域卷积神经网络一直被传统目标识别算法(特征提取+分类器)所压制,直到 ...

  9. VS2019调试查看变量_机器人调试(六十六)

    一.给VS2012MFC添加DOS窗口 在相关的.cpp中添加: #include #include 添加控制台初始化函数: 需要调用AllocConsole()函数 //控制台初始化void Ini ...

最新文章

  1. valgrind——Callgrind检测程序代码的运行时间和调用过程,程序分析性能。
  2. mysql存储过程 带参数例子_MySQL带参数的存储过程小例子
  3. script 有哪个属性可以让它不立即执行 defer,async
  4. ELK+logback搭建日志系统
  5. 不用空格怎么打两个空格_和平精英:苹果手机怎么打空格 空白名使用教程
  6. Juniper SSG20 Config DHCP Server
  7. 判断IP是否为搜索引擎蜘蛛或爬虫
  8. 游戏测试一工作原理及测试流程
  9. 企业邮箱客户端POP协议收信后,Webmail的邮件被删除,如何调整?
  10. 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!
  11. 爱尔兰都柏林大学计算机科学专业,爱尔兰都柏林大学专业介绍
  12. [论文笔记] 视频广告内容结构的多模态表示学习
  13. 业界 | 为什么Jupyter是数据科学家们实战工具的首选?
  14. 设置 XShell 的默认全局配色方案
  15. mysql在线编辑器
  16. 关于旅游的数据接口API(去哪儿 NodeJs版API)
  17. 优恩解答GDT放电管是怎么工作的
  18. 新的开始——1月英语
  19. 信赖域(Trust Region)算法
  20. 捷径智慧物业管理系统,全面覆盖了物业所面临的每一项痛点问题,让物业工作开展的更加顺利。-捷径智慧物业管理

热门文章

  1. 【百度联盟峰会】李彦宏详解AI时代思维方式,算法驱动的降维攻击
  2. 实战SSM_O2O商铺_45【Redis缓存】配置Redis在Service层加入缓存
  3. 实战SSM_O2O商铺_19【商铺编辑】Controller层开发
  4. NavigationDrawer和NavigationView-Android M新控件
  5. 移动端html5手写板,Vue+canvas实现移动端手写板步骤详解
  6. directadmin php.ini 修改,如何快速修改DirectAdmin面板默认2222端口
  7. linux检查是否安装proc编译器,编译安装 GCC 4.9并验证使用
  8. C语言编译:CMakeLists.txt语句【01】
  9. ROS安装:Ubuntu18.04安装配置ROS-melodic
  10. Halcon初学者知识【5】画若干个圆