From e574b947876de48ccedabd64ad758c88090d02c8 Mon Sep 17 00:00:00 2001 From: Lukas Riedersberger <lukasac@gmx.de> Date: Tue, 26 Apr 2016 23:26:30 +0200 Subject: [PATCH] image pyramid done --- OFCV/header/opticalflow.hpp | 10 ++++++++-- OFCV/source/HornSchunck.cpp | 5 +++++ OFCV/source/HornSchunckPyramidal.cpp | 19 +++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/OFCV/header/opticalflow.hpp b/OFCV/header/opticalflow.hpp index 81a52e3..8a4beab 100644 --- a/OFCV/header/opticalflow.hpp +++ b/OFCV/header/opticalflow.hpp @@ -32,8 +32,13 @@ namespace OpticalFlow { image_t1 = t1.clone(); image_t2 = t2.clone(); - cvtColor(image_t1,image_t1_GRAY,COLOR_BGR2GRAY); - cvtColor(image_t2,image_t2_GRAY,COLOR_BGR2GRAY); + if(image_t1.channels() > 1){ + cvtColor(image_t1,image_t1_GRAY,COLOR_BGR2GRAY); + } else image_t1_GRAY = image_t1.clone(); + + if(image_t2.channels() > 1){ + cvtColor(image_t2,image_t2_GRAY,COLOR_BGR2GRAY); + } else image_t2_GRAY = image_t2.clone(); } ~OF(){} void drawOptFlowMap (const Mat& flow, Mat& cflowmap, int step, const Scalar& color) { @@ -62,6 +67,7 @@ namespace OpticalFlow { HornSchunck(const Mat &t1,const Mat &t2); void calc(); void draw(); + Mat getFlow(); }; class HornSchunckPyramidal : private OF{ public: diff --git a/OFCV/source/HornSchunck.cpp b/OFCV/source/HornSchunck.cpp index 4f338df..b876dfe 100644 --- a/OFCV/source/HornSchunck.cpp +++ b/OFCV/source/HornSchunck.cpp @@ -211,6 +211,11 @@ namespace OpticalFlow { flow = uv_point2f_cv(u,v); } + Mat HornSchunck::getFlow() + { + return flow; + } + void HornSchunck::draw() { Mat &t0=image_t1_GRAY; diff --git a/OFCV/source/HornSchunckPyramidal.cpp b/OFCV/source/HornSchunckPyramidal.cpp index 7d3707f..dd4ecfc 100644 --- a/OFCV/source/HornSchunckPyramidal.cpp +++ b/OFCV/source/HornSchunckPyramidal.cpp @@ -189,14 +189,29 @@ namespace OpticalFlow { size /= 2; } - for(int i = 0; i < pyramid.size(); ++i) + reverse(pyramid.begin(),pyramid.end()); + reverse(sizes.begin(),sizes.end()); + + /*for(int i = 0; i < pyramid.size(); ++i) { String name = "Pyramid"+i; imshow(name, pyramid[i].first); } + cv::waitKey(0);*/ + vector<Mat> results(pyramid.size(),Mat()); + for(int i = 0; i < pyramid.size(); ++i) + { + HornSchunck flow(pyramid[i].first,pyramid[i].second); + flow.calc(); + std::cout << sizes[i] << " done" << std::endl; + Mat fl = flow.getFlow().clone(); + resize(image_t1, results[i], sizes[i]); + String name = "Pyramid"+i; + drawOptFlowMap(fl, results[i], 5, CV_RGB(0, 255, 0)); + imshow(name, results[i]); + } cv::waitKey(0); - } void HornSchunckPyramidal::draw() -- GitLab