From b3a743f09a94bddcde0344ae37f1754c887a1685 Mon Sep 17 00:00:00 2001 From: Vladislav Vinogradov Date: Wed, 31 Dec 2014 15:37:09 +0300 Subject: [PATCH] fix gpu samples compilation --- samples/gpu/farneback_optical_flow.cpp | 19 +++++--- samples/gpu/optical_flow.cpp | 61 +++++++++----------------- samples/gpu/pyrlk_optical_flow.cpp | 24 ++-------- 3 files changed, 35 insertions(+), 69 deletions(-) diff --git a/samples/gpu/farneback_optical_flow.cpp b/samples/gpu/farneback_optical_flow.cpp index b8ed55ea6..798b108a6 100644 --- a/samples/gpu/farneback_optical_flow.cpp +++ b/samples/gpu/farneback_optical_flow.cpp @@ -7,6 +7,7 @@ #include "opencv2/highgui.hpp" #include "opencv2/video.hpp" #include "opencv2/cudaoptflow.hpp" +#include "opencv2/cudaarithm.hpp" using namespace std; using namespace cv; @@ -70,8 +71,8 @@ int main(int argc, char **argv) if (frameL.empty() || frameR.empty()) return -1; GpuMat d_frameL(frameL), d_frameR(frameR); - GpuMat d_flowx, d_flowy; - FarnebackOpticalFlow d_calc; + GpuMat d_flow; + Ptr d_calc = cuda::FarnebackOpticalFlow::create(); Mat flowxy, flowx, flowy, image; bool running = true, gpuMode = true; @@ -86,17 +87,21 @@ int main(int argc, char **argv) if (gpuMode) { tc0 = getTickCount(); - d_calc(d_frameL, d_frameR, d_flowx, d_flowy); + d_calc->calc(d_frameL, d_frameR, d_flow); tc1 = getTickCount(); - d_flowx.download(flowx); - d_flowy.download(flowy); + + GpuMat planes[2]; + cuda::split(d_flow, planes); + + planes[0].download(flowx); + planes[1].download(flowy); } else { tc0 = getTickCount(); calcOpticalFlowFarneback( - frameL, frameR, flowxy, d_calc.pyrScale, d_calc.numLevels, d_calc.winSize, - d_calc.numIters, d_calc.polyN, d_calc.polySigma, d_calc.flags); + frameL, frameR, flowxy, d_calc->getPyrScale(), d_calc->getNumLevels(), d_calc->getWinSize(), + d_calc->getNumIters(), d_calc->getPolyN(), d_calc->getPolySigma(), d_calc->getFlags()); tc1 = getTickCount(); Mat planes[] = {flowx, flowy}; diff --git a/samples/gpu/optical_flow.cpp b/samples/gpu/optical_flow.cpp index 7d625de85..b1b3c8de1 100644 --- a/samples/gpu/optical_flow.cpp +++ b/samples/gpu/optical_flow.cpp @@ -5,6 +5,7 @@ #include #include "opencv2/highgui.hpp" #include "opencv2/cudaoptflow.hpp" +#include "opencv2/cudaarithm.hpp" using namespace std; using namespace cv; @@ -122,10 +123,13 @@ static void drawOpticalFlow(const Mat_& flowx, const Mat_& flowy, } } -static void showFlow(const char* name, const GpuMat& d_flowx, const GpuMat& d_flowy) +static void showFlow(const char* name, const GpuMat& d_flow) { - Mat flowx(d_flowx); - Mat flowy(d_flowy); + GpuMat planes[2]; + cuda::split(d_flow, planes); + + Mat flowx(planes[0]); + Mat flowy(planes[1]); Mat out; drawOpticalFlow(flowx, flowy, out, 10); @@ -171,14 +175,12 @@ int main(int argc, const char* argv[]) GpuMat d_frame0(frame0); GpuMat d_frame1(frame1); - GpuMat d_flowx(frame0.size(), CV_32FC1); - GpuMat d_flowy(frame0.size(), CV_32FC1); + GpuMat d_flow(frame0.size(), CV_32FC2); - BroxOpticalFlow brox(0.197f, 50.0f, 0.8f, 10, 77, 10); - PyrLKOpticalFlow lk; lk.winSize = Size(7, 7); - FarnebackOpticalFlow farn; - OpticalFlowDual_TVL1_CUDA tvl1; - FastOpticalFlowBM fastBM; + Ptr brox = cuda::BroxOpticalFlow::create(0.197f, 50.0f, 0.8f, 10, 77, 10); + Ptr lk = cuda::DensePyrLKOpticalFlow::create(Size(7, 7)); + Ptr farn = cuda::FarnebackOpticalFlow::create(); + Ptr tvl1 = cuda::OpticalFlowDual_TVL1::create(); { GpuMat d_frame0f; @@ -189,68 +191,45 @@ int main(int argc, const char* argv[]) const int64 start = getTickCount(); - brox(d_frame0f, d_frame1f, d_flowx, d_flowy); + brox->calc(d_frame0f, d_frame1f, d_flow); const double timeSec = (getTickCount() - start) / getTickFrequency(); cout << "Brox : " << timeSec << " sec" << endl; - showFlow("Brox", d_flowx, d_flowy); + showFlow("Brox", d_flow); } { const int64 start = getTickCount(); - lk.dense(d_frame0, d_frame1, d_flowx, d_flowy); + lk->calc(d_frame0, d_frame1, d_flow); const double timeSec = (getTickCount() - start) / getTickFrequency(); cout << "LK : " << timeSec << " sec" << endl; - showFlow("LK", d_flowx, d_flowy); + showFlow("LK", d_flow); } { const int64 start = getTickCount(); - farn(d_frame0, d_frame1, d_flowx, d_flowy); + farn->calc(d_frame0, d_frame1, d_flow); const double timeSec = (getTickCount() - start) / getTickFrequency(); cout << "Farn : " << timeSec << " sec" << endl; - showFlow("Farn", d_flowx, d_flowy); + showFlow("Farn", d_flow); } { const int64 start = getTickCount(); - tvl1(d_frame0, d_frame1, d_flowx, d_flowy); + tvl1->calc(d_frame0, d_frame1, d_flow); const double timeSec = (getTickCount() - start) / getTickFrequency(); cout << "TVL1 : " << timeSec << " sec" << endl; - showFlow("TVL1", d_flowx, d_flowy); - } - - { - const int64 start = getTickCount(); - - GpuMat buf; - calcOpticalFlowBM(d_frame0, d_frame1, Size(7, 7), Size(1, 1), Size(21, 21), false, d_flowx, d_flowy, buf); - - const double timeSec = (getTickCount() - start) / getTickFrequency(); - cout << "BM : " << timeSec << " sec" << endl; - - showFlow("BM", d_flowx, d_flowy); - } - - { - const int64 start = getTickCount(); - - fastBM(d_frame0, d_frame1, d_flowx, d_flowy); - - const double timeSec = (getTickCount() - start) / getTickFrequency(); - cout << "Fast BM : " << timeSec << " sec" << endl; - - showFlow("Fast BM", d_flowx, d_flowy); + showFlow("TVL1", d_flow); } imshow("Frame 0", frame0); diff --git a/samples/gpu/pyrlk_optical_flow.cpp b/samples/gpu/pyrlk_optical_flow.cpp index febc28f28..9074c47b6 100644 --- a/samples/gpu/pyrlk_optical_flow.cpp +++ b/samples/gpu/pyrlk_optical_flow.cpp @@ -186,12 +186,8 @@ int main(int argc, const char* argv[]) // Sparse - PyrLKOpticalFlow d_pyrLK; - - d_pyrLK.winSize.width = winSize; - d_pyrLK.winSize.height = winSize; - d_pyrLK.maxLevel = maxLevel; - d_pyrLK.iters = iters; + Ptr d_pyrLK = cuda::SparsePyrLKOpticalFlow::create( + Size(winSize, winSize), maxLevel, iters); GpuMat d_frame0(frame0); GpuMat d_frame1(frame1); @@ -199,7 +195,7 @@ int main(int argc, const char* argv[]) GpuMat d_nextPts; GpuMat d_status; - d_pyrLK.sparse(useGray ? d_frame0Gray : d_frame0, useGray ? d_frame1Gray : d_frame1, d_prevPts, d_nextPts, d_status); + d_pyrLK->calc(useGray ? d_frame0Gray : d_frame0, useGray ? d_frame1Gray : d_frame1, d_prevPts, d_nextPts, d_status); // Draw arrows @@ -216,20 +212,6 @@ int main(int argc, const char* argv[]) imshow("PyrLK [Sparse]", frame0); - // Dense - - GpuMat d_u; - GpuMat d_v; - - d_pyrLK.dense(d_frame0Gray, d_frame1Gray, d_u, d_v); - - // Draw flow field - - Mat flowField; - getFlowField(Mat(d_u), Mat(d_v), flowField); - - imshow("PyrLK [Dense] Flow Field", flowField); - waitKey(); return 0;