diff --git a/OFCV/header/opticalflow.hpp b/OFCV/header/opticalflow.hpp index 81a52e31f0df217d0043c56c159ed5cc6663b47b..8a4beaba085033c2f8c7d626ad015f674aa97188 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 4f338df9bd94dde1249844759756253befcb868e..b876dfe7142ea94741aa60d0ad7bcb9085a5d2b6 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 7d3707f9739ab5f976e74c41a82e1476aef63758..dd4ecfc4427ce5799001bbd7e16554854735c281 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()