fix gpu samples compilation
This commit is contained in:
parent
62f8240b00
commit
b3a743f09a
@ -7,6 +7,7 @@
|
|||||||
#include "opencv2/highgui.hpp"
|
#include "opencv2/highgui.hpp"
|
||||||
#include "opencv2/video.hpp"
|
#include "opencv2/video.hpp"
|
||||||
#include "opencv2/cudaoptflow.hpp"
|
#include "opencv2/cudaoptflow.hpp"
|
||||||
|
#include "opencv2/cudaarithm.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
@ -70,8 +71,8 @@ int main(int argc, char **argv)
|
|||||||
if (frameL.empty() || frameR.empty()) return -1;
|
if (frameL.empty() || frameR.empty()) return -1;
|
||||||
|
|
||||||
GpuMat d_frameL(frameL), d_frameR(frameR);
|
GpuMat d_frameL(frameL), d_frameR(frameR);
|
||||||
GpuMat d_flowx, d_flowy;
|
GpuMat d_flow;
|
||||||
FarnebackOpticalFlow d_calc;
|
Ptr<cuda::FarnebackOpticalFlow> d_calc = cuda::FarnebackOpticalFlow::create();
|
||||||
Mat flowxy, flowx, flowy, image;
|
Mat flowxy, flowx, flowy, image;
|
||||||
|
|
||||||
bool running = true, gpuMode = true;
|
bool running = true, gpuMode = true;
|
||||||
@ -86,17 +87,21 @@ int main(int argc, char **argv)
|
|||||||
if (gpuMode)
|
if (gpuMode)
|
||||||
{
|
{
|
||||||
tc0 = getTickCount();
|
tc0 = getTickCount();
|
||||||
d_calc(d_frameL, d_frameR, d_flowx, d_flowy);
|
d_calc->calc(d_frameL, d_frameR, d_flow);
|
||||||
tc1 = getTickCount();
|
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
|
else
|
||||||
{
|
{
|
||||||
tc0 = getTickCount();
|
tc0 = getTickCount();
|
||||||
calcOpticalFlowFarneback(
|
calcOpticalFlowFarneback(
|
||||||
frameL, frameR, flowxy, d_calc.pyrScale, d_calc.numLevels, d_calc.winSize,
|
frameL, frameR, flowxy, d_calc->getPyrScale(), d_calc->getNumLevels(), d_calc->getWinSize(),
|
||||||
d_calc.numIters, d_calc.polyN, d_calc.polySigma, d_calc.flags);
|
d_calc->getNumIters(), d_calc->getPolyN(), d_calc->getPolySigma(), d_calc->getFlags());
|
||||||
tc1 = getTickCount();
|
tc1 = getTickCount();
|
||||||
|
|
||||||
Mat planes[] = {flowx, flowy};
|
Mat planes[] = {flowx, flowy};
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <opencv2/core/utility.hpp>
|
#include <opencv2/core/utility.hpp>
|
||||||
#include "opencv2/highgui.hpp"
|
#include "opencv2/highgui.hpp"
|
||||||
#include "opencv2/cudaoptflow.hpp"
|
#include "opencv2/cudaoptflow.hpp"
|
||||||
|
#include "opencv2/cudaarithm.hpp"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
@ -122,10 +123,13 @@ static void drawOpticalFlow(const Mat_<float>& flowx, const Mat_<float>& 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);
|
GpuMat planes[2];
|
||||||
Mat flowy(d_flowy);
|
cuda::split(d_flow, planes);
|
||||||
|
|
||||||
|
Mat flowx(planes[0]);
|
||||||
|
Mat flowy(planes[1]);
|
||||||
|
|
||||||
Mat out;
|
Mat out;
|
||||||
drawOpticalFlow(flowx, flowy, out, 10);
|
drawOpticalFlow(flowx, flowy, out, 10);
|
||||||
@ -171,14 +175,12 @@ int main(int argc, const char* argv[])
|
|||||||
GpuMat d_frame0(frame0);
|
GpuMat d_frame0(frame0);
|
||||||
GpuMat d_frame1(frame1);
|
GpuMat d_frame1(frame1);
|
||||||
|
|
||||||
GpuMat d_flowx(frame0.size(), CV_32FC1);
|
GpuMat d_flow(frame0.size(), CV_32FC2);
|
||||||
GpuMat d_flowy(frame0.size(), CV_32FC1);
|
|
||||||
|
|
||||||
BroxOpticalFlow brox(0.197f, 50.0f, 0.8f, 10, 77, 10);
|
Ptr<cuda::BroxOpticalFlow> brox = cuda::BroxOpticalFlow::create(0.197f, 50.0f, 0.8f, 10, 77, 10);
|
||||||
PyrLKOpticalFlow lk; lk.winSize = Size(7, 7);
|
Ptr<cuda::DensePyrLKOpticalFlow> lk = cuda::DensePyrLKOpticalFlow::create(Size(7, 7));
|
||||||
FarnebackOpticalFlow farn;
|
Ptr<cuda::FarnebackOpticalFlow> farn = cuda::FarnebackOpticalFlow::create();
|
||||||
OpticalFlowDual_TVL1_CUDA tvl1;
|
Ptr<cuda::OpticalFlowDual_TVL1> tvl1 = cuda::OpticalFlowDual_TVL1::create();
|
||||||
FastOpticalFlowBM fastBM;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
GpuMat d_frame0f;
|
GpuMat d_frame0f;
|
||||||
@ -189,68 +191,45 @@ int main(int argc, const char* argv[])
|
|||||||
|
|
||||||
const int64 start = getTickCount();
|
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();
|
const double timeSec = (getTickCount() - start) / getTickFrequency();
|
||||||
cout << "Brox : " << timeSec << " sec" << endl;
|
cout << "Brox : " << timeSec << " sec" << endl;
|
||||||
|
|
||||||
showFlow("Brox", d_flowx, d_flowy);
|
showFlow("Brox", d_flow);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const int64 start = getTickCount();
|
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();
|
const double timeSec = (getTickCount() - start) / getTickFrequency();
|
||||||
cout << "LK : " << timeSec << " sec" << endl;
|
cout << "LK : " << timeSec << " sec" << endl;
|
||||||
|
|
||||||
showFlow("LK", d_flowx, d_flowy);
|
showFlow("LK", d_flow);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const int64 start = getTickCount();
|
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();
|
const double timeSec = (getTickCount() - start) / getTickFrequency();
|
||||||
cout << "Farn : " << timeSec << " sec" << endl;
|
cout << "Farn : " << timeSec << " sec" << endl;
|
||||||
|
|
||||||
showFlow("Farn", d_flowx, d_flowy);
|
showFlow("Farn", d_flow);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const int64 start = getTickCount();
|
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();
|
const double timeSec = (getTickCount() - start) / getTickFrequency();
|
||||||
cout << "TVL1 : " << timeSec << " sec" << endl;
|
cout << "TVL1 : " << timeSec << " sec" << endl;
|
||||||
|
|
||||||
showFlow("TVL1", d_flowx, d_flowy);
|
showFlow("TVL1", d_flow);
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
imshow("Frame 0", frame0);
|
imshow("Frame 0", frame0);
|
||||||
|
@ -186,12 +186,8 @@ int main(int argc, const char* argv[])
|
|||||||
|
|
||||||
// Sparse
|
// Sparse
|
||||||
|
|
||||||
PyrLKOpticalFlow d_pyrLK;
|
Ptr<cuda::SparsePyrLKOpticalFlow> d_pyrLK = cuda::SparsePyrLKOpticalFlow::create(
|
||||||
|
Size(winSize, winSize), maxLevel, iters);
|
||||||
d_pyrLK.winSize.width = winSize;
|
|
||||||
d_pyrLK.winSize.height = winSize;
|
|
||||||
d_pyrLK.maxLevel = maxLevel;
|
|
||||||
d_pyrLK.iters = iters;
|
|
||||||
|
|
||||||
GpuMat d_frame0(frame0);
|
GpuMat d_frame0(frame0);
|
||||||
GpuMat d_frame1(frame1);
|
GpuMat d_frame1(frame1);
|
||||||
@ -199,7 +195,7 @@ int main(int argc, const char* argv[])
|
|||||||
GpuMat d_nextPts;
|
GpuMat d_nextPts;
|
||||||
GpuMat d_status;
|
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
|
// Draw arrows
|
||||||
|
|
||||||
@ -216,20 +212,6 @@ int main(int argc, const char* argv[])
|
|||||||
|
|
||||||
imshow("PyrLK [Sparse]", frame0);
|
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();
|
waitKey();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user