From 02646427fb04e80bb56bfb25e9aa88e7d4da364e Mon Sep 17 00:00:00 2001
From: LeonidBeynenson <leonid.beynenson@itseez.com>
Date: Thu, 1 Nov 2012 19:31:45 +0400
Subject: [PATCH] Fixed arguments of the function calcOpticalFlowSF.

---
 .../video/include/opencv2/video/tracking.hpp  | 12 +++++-----
 modules/video/src/simpleflow.cpp              | 23 +++++++++++--------
 2 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/modules/video/include/opencv2/video/tracking.hpp b/modules/video/include/opencv2/video/tracking.hpp
index deef20b42..be9407aca 100644
--- a/modules/video/include/opencv2/video/tracking.hpp
+++ b/modules/video/include/opencv2/video/tracking.hpp
@@ -328,16 +328,16 @@ CV_EXPORTS_W Mat estimateRigidTransform( InputArray src, InputArray dst,
                                          bool fullAffine);
 
 //! computes dense optical flow using Simple Flow algorithm
-CV_EXPORTS_W void calcOpticalFlowSF(Mat& from,
-                                    Mat& to,
-                                    Mat& flow,
+CV_EXPORTS_W void calcOpticalFlowSF(InputArray from,
+                                    InputArray to,
+                                    OutputArray flow,
                                     int layers,
                                     int averaging_block_size,
                                     int max_flow);
 
-CV_EXPORTS_W void calcOpticalFlowSF(Mat& from,
-                                    Mat& to,
-                                    Mat& flow,
+CV_EXPORTS_W void calcOpticalFlowSF(InputArray from,
+                                    InputArray to,
+                                    OutputArray flow,
                                     int layers,
                                     int averaging_block_size,
                                     int max_flow,
diff --git a/modules/video/src/simpleflow.cpp b/modules/video/src/simpleflow.cpp
index 1de8084c5..81886eb2c 100644
--- a/modules/video/src/simpleflow.cpp
+++ b/modules/video/src/simpleflow.cpp
@@ -447,7 +447,7 @@ static void extrapolateFlow(Mat& flow,
   }
 }
 
-static void buildPyramidWithResizeMethod(Mat& src,
+static void buildPyramidWithResizeMethod(const Mat& src,
                                   vector<Mat>& pyramid,
                                   int layers,
                                   int interpolation_type) {
@@ -464,9 +464,9 @@ static void buildPyramidWithResizeMethod(Mat& src,
   }
 }
 
-CV_EXPORTS_W void calcOpticalFlowSF(Mat& from,
-                                    Mat& to,
-                                    Mat& resulted_flow,
+CV_EXPORTS_W void calcOpticalFlowSF(InputArray _from,
+                                    InputArray _to,
+                                    OutputArray _resulted_flow,
                                     int layers,
                                     int averaging_radius,
                                     int max_flow,
@@ -479,7 +479,11 @@ CV_EXPORTS_W void calcOpticalFlowSF(Mat& from,
                                     int upscale_averaging_radius,
                                     double upscale_sigma_dist,
                                     double upscale_sigma_color,
-                                    double speed_up_thr) {
+                                    double speed_up_thr) 
+{
+  Mat from = _from.getMat();
+  Mat to = _to.getMat();
+
   vector<Mat> pyr_from_images;
   vector<Mat> pyr_to_images;
 
@@ -632,14 +636,15 @@ CV_EXPORTS_W void calcOpticalFlowSF(Mat& from,
 
   GaussianBlur(flow, flow, Size(3, 3), 5);
 
-  resulted_flow = Mat(flow.size(), CV_32FC2);
+  _resulted_flow.create(flow.size(), CV_32FC2);
+  Mat resulted_flow = _resulted_flow.getMat();
   int from_to[] = {0,1 , 1,0};
   mixChannels(&flow, 1, &resulted_flow, 1, from_to, 2);
 }
 
-CV_EXPORTS_W void calcOpticalFlowSF(Mat& from,
-                                    Mat& to,
-                                    Mat& flow,
+CV_EXPORTS_W void calcOpticalFlowSF(InputArray from,
+                                    InputArray to,
+                                    OutputArray flow,
                                     int layers,
                                     int averaging_block_size,
                                     int max_flow) {