资源简介

用opencv2.3.1在vs2008开发的l-k光流法的运动估计,有详细的注释

资源截图

代码片段和文件信息

/************************************************************************
* Copyright(c) 2011  Yang Xian
* All rights reserved.
*
* File: opticalFlow.cpp
* Brief: lk光流法做运动目标检测
* Version: 1.0
* Author: Yang Xian
* Email: xyang2011@sinano.ac.cn
* Date: 2011/11/18
* History:
************************************************************************/
#include 
#include 
#include 
#include 

#include 
#include 

using namespace std;
using namespace cv;

void tracking(Mat &frame Mat &output);
bool addNewPoints();
bool acceptTrackedPoint(int i);

string window_name = “optical flow tracking“;
Mat gray; // 当前图片
Mat gray_prev; // 预测图片
vector points[2]; // point0为特征点的原来位置,point1为特征点的新位置
vector initial; // 初始化跟踪点的位置
vector features; // 检测的特征
int maxCount = 500; // 检测的最大特征数
double qLevel = 0.01; // 特征检测的等级
double minDist = 10.0; // 两特征点之间的最小距离
vector status; // 跟踪特征的状态,特征的流发现为1,否则为0
vector err;

int main()
{
Mat frame;
Mat result;

//  CvCapture* capture = cvCaptureFromCAM( -1 ); // 摄像头读取文件开关
VideoCapture capture(“bike.avi“);

if(capture.isOpened()/*capture*/) // 摄像头读取文件开关
{
while(true)
{
//  frame = cvQueryframe( capture ); // 摄像头读取文件开关
capture >> frame;

if(!frame.empty())

tracking(frame result);
}
else

printf(“ --(!) No captured frame -- Break!“);
break;
}

int c = waitKey(100);
if( (char)c == 27 )
{
break; 

}
}
return 0;
}

//////////////////////////////////////////////////////////////////////////
// function: tracking
// brief: 跟踪
// parameter: frame 输入的视频帧
//   output 有跟踪结果的视频帧
// return: void
//////////////////////////////////////////////////////////////////////////
void tracking(Mat &frame Mat &output)
{
cvtColor(frame gray CV_BGR2GRAY);
frame.copyTo(output);
// 添加特征点
if (addNewPoints())
{
goodFeaturesToTrack(gray features maxCount qLevel minDist);
points[0].insert(points[0].end() features.begin() features.end());
initial.insert(initial.end() features.begin() features.end());
}

if (gray_prev.empty())
{
gray.copyTo(gray_prev);
}
// l-k光流法运动估计
calcOpticalFlowPyrLK(gray_prev gray points[0] points[1] status err);
// 去掉一些不好的特征点
int k = 0;
for (size_t i=0; i {
if (acceptTrackedPoint(i))
{
initial[k] = initial[i];
points[1][k++] = points[1][i];
}
}
points[1].resize(k);
initial.resize(k);
// 显示特征点和运动轨迹
for (size_t i=0; i {
line(output initial[i] points[1][i] Scalar(0 0 255));
circle(output points[1][i] 3 Scalar(255 0 0) -1);
}

// 把当前跟踪结果作为下一此参考
swap(points[1] points[0]);
swap(gray_prev gray);

imshow(window_name output);
}

////////////////////////////////////////////////////

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     446600  2011-02-16 14:14  OpticalFlow\Debug\bike.avi

     文件     104448  2011-11-18 18:08  OpticalFlow\Debug\OpticalFlow.exe

     文件     568612  2011-11-18 18:08  OpticalFlow\Debug\OpticalFlow.ilk

     文件    1051648  2011-11-18 18:08  OpticalFlow\Debug\OpticalFlow.pdb

     文件     446600  2011-02-16 14:14  OpticalFlow\OpticalFlow\bike.avi

     文件       6048  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug\BuildLog.htm

     文件       1511  2011-11-18 15:29  OpticalFlow\OpticalFlow\Debug\FeatureTracker.obj

     文件       1511  2011-11-18 15:29  OpticalFlow\OpticalFlow\Debug\frameProcessor.obj

     文件         67  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug\mt.dep

     文件        621  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug\OpticalFlow.exe.intermediate.manifest

     文件     395199  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug\opticalFlow.obj

     文件     355328  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug\vc90.idb

     文件     520192  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug\vc90.pdb

     文件       3837  2011-11-18 18:08  OpticalFlow\OpticalFlow\opticalFlow.cpp

     文件       3772  2011-11-18 15:33  OpticalFlow\OpticalFlow\OpticalFlow.vcproj

     文件       1423  2011-11-18 18:08  OpticalFlow\OpticalFlow\OpticalFlow.vcproj.HP98402794308.Administrator.user

     文件    3058688  2011-11-18 18:08  OpticalFlow\OpticalFlow.ncb

     文件        899  2011-11-18 10:55  OpticalFlow\OpticalFlow.sln

    ..A..H.      9728  2011-11-18 18:08  OpticalFlow\OpticalFlow.suo

     目录          0  2011-11-18 18:08  OpticalFlow\OpticalFlow\Debug

     目录          0  2011-11-18 18:08  OpticalFlow\Debug

     目录          0  2011-11-18 18:08  OpticalFlow\OpticalFlow

     目录          0  2011-11-18 15:30  OpticalFlow

----------- ---------  ---------- -----  ----

              6976732                    23


评论

共有 条评论