useLK 光流法跟踪FAST角点

执行    ./useLK ../../data 运行程序。

光流法需要include<opencv2/video/tracking.hpp>,用到列表,所以要include<list><vector>

1.读取文件
定义图像存储路径用string
string path_dataset=argv[1];
associate文件地址
string associate_file=path_dataset+"/associate.txt";
读取associate_file.
ifstream fin(associate_file);

因为associate文件的每一行分别是time_color,color,time_depth,depth.所以定义这4个路径,方便之后读取深度图和彩色图。
string rgb_file,depth_file,time_rgb,time_depth,
弄个for循环。然后把fin的每一行分别赋值。
for(int index=0;index<100;index++)
fin>>time_rgb>>rgb_file>>time_depth>>depth_file;
有路径了,就读取吧。深度图读的时候要加-1.
color=cv::read(path_dataset+"/"+rgb_file);
depth=cv::read(path_dataset+"/"+depth_file,-1);

2.对第一帧提取FAST特征点

只对第一个图像提取特征。然后对第一幅图像提取的特征进行追踪。

if(index==0)
执行
vector<cv::KeyPoint> kps;
cv::Ptr<cv::FastFeatureDetector> detector=cv::FastFeatureDector::create();
detector->detect(color,kps)
由于这里提取的kps是cv::KeyPoint形式,需要把每一个特征点都变成Point2f形式。所以
for(auto kp:kps)
keypoints.push_back(kp.pt);
这里的keypoints的类型为list<cv::Point2f>,方便之后删除。
取完特征点之后last_color=color;
中间如果color.data或者depth.date有一个为空指针,直接从头开始执行。

3.其他帧用LK光流法追踪特征点
定义两个特征点形式,一个是next_keypoints,一个是prev_keypoints.一个表示之后的,一个表示先前的。都是vector<cv::Point2f>形式。
prev_keypoints先前的特征点 表示的是从之前循环得到的特征点。第一次就是提取到的所有特征点。
定义status和error.类型分别为vector<unsiged char> 和vector<float>
把last_color,color,prev_keypoints,next_keypoints,status,error依次放到函数cv::calcOpticalFlowPyrLK函数中,可以返回next_keypoints,status,error.
如果index==1,的话,这里,last_color=color,也就是说两个是相等的。

4.把跟丢的点删掉
int i=0.
for(auto iter=keypoints.begin();iter!=keypoints.endl;i++)
如果status对应的第i个值是0,应该说明这个特征点跟丢了。那么iter=keypoints.erase(iter);
erase是擦除函数。
keypoints这里是个列表,所以begin是它的第一个元素。
如果第1个元素为0,那么iter原来是keypoints的第一个元素,Iter等于keypoints擦除iter这个元素之后的列表。然后跳到for循环,然后iter为第1个元素,但是因为keypoints的第一元素被擦除了,所以第一个元素已经换了,如果status[2]!=0,指针iter为next_keypoints[i]的第i个元素。iter+1.所以i是一直加的。
这里擦除之后,可以得到下个图还剩多少特征点。
添加了cv::waitKey(0),这个的意思是每次循环后暂停,按任意键继续。

5..画图
cv::Mat img_show=color.clone();
画的图片也是一个矩阵。
要把每一个特征点都用cv::circle表示一下。
for(auto kp:keypoints)
cv::circle(img_show,kp,10,cv::Scalar(0,240,0),1)
展示用cv::imshow就可以了。
然后last_color=color.
cv后面的函数都是第一个字母小写,换字符大写。
例如cv::calcOptical..,cv::waitKey(0)
fin直接associate_file,不带引号的。

原文:https://www.cnblogs.com/talugirl/p/7388607.html

ch8 -- useLK的更多相关文章

  1. 高翔《视觉SLAM十四讲》从理论到实践

    目录 第1讲 前言:本书讲什么:如何使用本书: 第2讲 初始SLAM:引子-小萝卜的例子:经典视觉SLAM框架:SLAM问题的数学表述:实践-编程基础: 第3讲 三维空间刚体运动 旋转矩阵:实践-Ei ...

  2. Mongodb Manual阅读笔记:CH8 复制集

    8 复制 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  3. [Database.System.Concepts(6th.Edition.2010)].Abraham.Silberschatz. Ch8学习笔记

    Database Ch8.relational design 8.1 features of good design 8.1.1 larger alternatives why design is g ...

  4. linux 私房菜 CH8 linux 磁盘与文件系统管理

    索引式文件系统 superblock 记录此系统的整体信息,包括 inode/block 的总量.使用量.剩余量,以及文件系统的格式与相关信息等: inode 记录档案的属性,一个档案占用一个 ino ...

  5. [HDFS Manual] CH8 HDFS Snapshots

    HDFS Snapshots HDFS Snapshots 1. 概述 1.1 Snapshottable目录 1.2 快照路径 2. 带快照的更新 3. 快照操作 3.1 管理操作 3.2 用户操作 ...

  6. 【学习笔记】Learning OpenCV3——Ch8 working with video

    Reading Video with the cv::VideoCapture Object 对象创建的三种方法: // 1. Input filename cv::VideoCapture::Vid ...

  7. ch8 -- directMethod

    稀疏直接法 主要用的g2o的方法.自己定义了一个新的一元边.边的误差项是测量值和由估计得来的x,y对应的灰度值之间的误差.导数为灰度对像素坐标的导数乘以像素坐标对yi*李代数的导数的负数.灰度对于像素 ...

  8. 【读书笔记】构建之法(CH7~CH8)

    MSF九大原则: 1. 推动信息共享与沟通:“谐”,Alert 2. 为共同的远景而工作:目标明确—用户/老板 3. 充分授权和信任: 4. 各司其职,对项目共同负责: 5. 交付增量的价值: 6. ...

  9. Core java for impatient 笔记 ch8 流

    流stream 使用了数据视图,让你可以在比集合更高的概念上指定操作使用流,你只需要将操作的调度留给实现,例如,假设你要计算某个属性的平均值,你只需要指定数据源和属性,然后流类库会优化计算,比如使用多 ...

随机推荐

  1. 如何实现1080P延迟低于500ms的实时超清直播传输技术

    再来当一次技术搬运工,内容来自高可用框架,学霸君工程师袁荣喜的如何实现1080P延迟低于500ms的实时超清直播传输技术. 导语:视频直播是很多技术团队及架构师关注的问题,在实时性方面,大部分直播是准 ...

  2. backbonejs学习

    文章: http://www.cnblogs.com/yexiaochai/archive/2013/07/27/3219402.html http://blog.csdn.net/cony100/a ...

  3. Chrome Developer Tools之内存分析

    可参考: Chrome Developer Tools之内存分析 http://www.kazaff.me/2014/01/26/chrome-developer-tools%E4%B9%8B%E5% ...

  4. css菜鸟学习之block,inline和inline-block概念和区别

    block,inline和inline-block概念和区别   总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) ...

  5. 问题:C#发布的项目浏览时出现“Server Application Unavailable”错误;结果:Server Application Unavailable出现的原因及解决方案小结

    Server Application Unavailable出现的原因及解决方案小结 作者: 字体:[增加 减小] 类型:转载 时间:2012-05-23 今天在服务器安装了个.net 4.0 fra ...

  6. python fabric的安装与使用

    背景:fabric主要执行远程的shell命令,包括文件的上传.下载,以及提示用户输入等辅助其它功能. 测试系统:ubuntu16 要求:python //系统有自带,ubuntu16 通常自带pyt ...

  7. Intent的简单概述

    Intent是负责在系统组件之间传递信息的一个对象,就像名字一样,是一个意图,可以将当前组件的意图传递给系统,例如启动Activity等,还可以在传递的时候附加上一些值,可以用Bundle对象封装这些 ...

  8. [51nod1212]最小生成树模板

    解题关键:注意下标 解法一:prim算法 #include<bits/stdc++.h> #define maxv 1002 #define maxm 50002 #define INF ...

  9. jquery提供的数据提交方式1

    1,ajax提交,部分代码为easyui function editNode(id){ $.ajax({ dataType:'json', async:true, //默认的就是异步提交 type:' ...

  10. 【转】Eclipse 插件 —— RunJettyRun 的安装与使用

    http://www.th7.cn/Program/java/201309/148299.shtml          关于 Jetty 与 Eclipse 的集成,网上很多都是使用 Eclipse ...