金字塔Lucas-Kanande光流算法实现
- // Lucas-Kanade method Optical Flow in OpenCV
- // BJTShang, 2016-12-13
- #include <cv.h>
- #include <cxcore.h>
- #include <highgui.h>
- const int MAX_CORNERS = 500;
- int main(int argc, char** argv){
- IplImage* imgA = cvLoadImage("/home/bjtshang/cpp_ws/opencv/data/OpticalFlow0.jpg",
- CV_LOAD_IMAGE_GRAYSCALE);
- IplImage* imgB = cvLoadImage("/home/bjtshang/cpp_ws/opencv/data/OpticalFlow1.jpg",
- CV_LOAD_IMAGE_GRAYSCALE);
- // image to show the optical flow vectors
- IplImage* imgC = cvLoadImage("/home/bjtshang/Desktop/OpticalFlow1.jpg",
- CV_LOAD_IMAGE_UNCHANGED);
- CvSize img_size = cvGetSize(imgA);
- CvSize win_size = cvSize(50, 50);
- int corner_count = MAX_CORNERS;
- // get the features (detect corners) need to be tracked
- IplImage* imgEig = cvCreateImage(img_size, IPL_DEPTH_32F, 1);
- IplImage* imgTmp = cvCreateImage(img_size, IPL_DEPTH_32F, 1);
- CvPoint2D32f* cornersA = new CvPoint2D32f[corner_count];
- cvGoodFeaturesToTrack(imgA, imgEig, imgTmp, cornersA, &corner_count,
- 0.02, 8.0, 0, 3, 0, 0.04);
- // find sub-pixel corners
- cvFindCornerSubPix(imgA, cornersA, corner_count,
- win_size, cvSize(-1,-1),
- cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 20, 0.1));
- char features_found[MAX_CORNERS];
- float feature_errors[MAX_CORNERS];
- CvSize pyr_size = cvSize(imgA->width+8, imgB->height/3);
- IplImage* pyrA = cvCreateImage(pyr_size, IPL_DEPTH_32F, 1);
- IplImage* pyrB = cvCreateImage(pyr_size, IPL_DEPTH_32F, 1);
- CvPoint2D32f* cornersB = new CvPoint2D32f[MAX_CORNERS];
- cvCalcOpticalFlowPyrLK(imgA, imgB, pyrA, pyrB, cornersA, cornersB,
- corner_count, win_size,
- 10, features_found, feature_errors,
- cvTermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 20, 0.1),
- 0
- );
- for(int i=0; i<corner_count; i++){
- if(features_found[i]==0 || feature_errors[i] > 550){
- printf("Error is: %f\n", feature_errors[i]);
- continue;
- }
- //printf("Got it\n");
- CvPoint p1 = cvPoint(cvRound(cornersA[i].x), cvRound(cornersA[i].y));
- CvPoint p2 = cvPoint(cvRound(cornersB[i].x), cvRound(cornersB[i].y));
- cvLine(imgC, p1, p2, CV_RGB(255, 0, 0), 1);
- }
- cvNamedWindow("imgA", 0);
- cvNamedWindow("imgB", 0);
- cvNamedWindow("Optical_flow", 0);
- cvShowImage("imgA", imgA);
- cvShowImage("imgB", imgB);
- cvShowImage("Optical_flow", imgC);
- cvWaitKey(0);
- return 0;
- }
金字塔Lucas-Kanande光流算法实现的更多相关文章
- Lucas–Kanade光流算法学习
Lucas–Kanade光流算法是一种两帧差分的光流估计算法.它由Bruce D. Lucas 和 Takeo Kanade提出. 光流(Optical flow or optic f ...
- 光流算法:Brox算法(转载)
参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...
- 光流算法:Brox算法
参考论文:1. High Accuracy Optical Flow Estimation Based on a Theory for Warping, Thomas Box, ECCV20042. ...
- LK光流算法:提高计算精度和增加搜索范围
LK光流算法:提高计算精度和增加搜索范围 关于LK算法的基本理论,见:http://www.cnblogs.com/dzyBK/p/4960630.html 这里主要阐述如何提高LK算法的计算精度和在 ...
- 光流算法:关于OpenCV读写middlebury网站给定的光流的代码
Middlebury是每个研究光流算法的人不可能不使用的网站,Middlebury提供了许多标准的测试库,这极大地推进了光流算法的进展.Middlebury提供的标准库,其计算出的光流保存在后缀名为. ...
- 光流算法:Brox光流的OpenCV源码解析
OpenCV中DeepFlow代码其实是Brox光流,而非真正的DeepFlow光流,在将近一个月的研究.移植及优化过程中,对Brox光流有了较深刻的认识.我对OpenCV中源码进行了详细的分析,并以 ...
- LK光流算法的三个假设
在实际过程中采用 Lucas-Kanade 光流算法跟踪运动物体特征点的时候,一个很明显的特点是LK算法(包括其他光流算法)不能计算"大运动",加上金子塔的方法稍微好点. 这是什么 ...
- cvCalcOpticalFlowPyrLK的使用--基于高斯金字塔的稀疏光流特征集求解
void cvCalcOpticalFlowPyrLK( const CvArr* prev, const CvArr* curr, CvArr* prev_pyr, CvArr* curr_pyr, ...
- 优化梯度计算的改进的HS光流算法
前言 在经典HS光流算法中,图像中两点间的灰度变化被假定为线性的,但实际上灰度变化是非线性的.本文详细分析了灰度估计不准确造成的偏差并提出了一种改进HS光流算法,这种算法可以得到较好的计算结果,并能明 ...
随机推荐
- 怎么在GitHub上寻找开源项目呢
find projects GitHub Explore: Popular and trending projects. GitHub Stars: Projects starred by other ...
- VS 生成事件
转载自: http://hi.baidu.com/gisince/item/7f0439ee610c94255a2d64b4 今天写了生成事件的处理,如下: 从网上Down了一个例子,运行时提示错误 ...
- 索引超出了数组界限(Microsoft.SqlServer.Smo)
SSMS连接远程SQL Server服务器是很方便的. 昨天我用SQL Server 2008 SSMS连接SQL Server 2012竟然报错,如下图: 在网上搜了,参考这个参考那个,太啰嗦了,确 ...
- [LeetCode] Excel Sheet Column Number 求Excel表列序号
Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...
- angular js 在ie11 下的get请求缓存问题的解决办法
使用angularjs 1.x开发的应用在ie11 下回碰到各种怪异的情况:一般表现在:卡,慢,丑. 还有另外一种情况,就是:get请求被缓存,导致页面数据没有刷新.今天我们就来解决这个问题. 几行代 ...
- RandHelper
/// <summary> /// 类说明:RandHelper类,用来实现取随机 /// 编码日期:2015-12-29 /// 编 码 人:里程碑 /// 修改日期:2015-12-2 ...
- Jenkins插件安装和系统配置
前面我们只是把Jenkins部署在Tomcat中了,下面来看看Jenkins中的插件和一些基础的系统配置. 1.用户管理 我们一般的项目组肯定是由多名成员组成的,如何向Jenkins添加我们的成员呢? ...
- vue.js 第五课
计算属性 1.基础例子 2.计算属性 vs $watch 3.计算 setter 4.计算属性开发实务demo 1.计算属性 computed( 电脑computer) (区别普通属性) 计算属性 ...
- 第一次源码分析: 图片加载框架Picasso源码分析
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...