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()