Merge pull request #1659 from ilya-lavrenov:ocl_examples

This commit is contained in:
Roman Donchenko 2013-10-23 14:50:55 +04:00 committed by OpenCV Buildbot
commit 6dda2652cd
10 changed files with 130 additions and 160 deletions

View File

@ -12,17 +12,27 @@ int main( int argc, const char** argv )
{
const char* keys =
"{ i | input | | specify input image }"
"{ k | ksize | 5 | specify kernel size }";
"{ k | ksize | 5 | specify kernel size }"
"{ h | help | false | print help message }";
CommandLineParser cmd(argc, argv, keys);
if (cmd.get<bool>("help"))
{
cout << "Usage : adaptive_bilateral_filter [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return EXIT_SUCCESS;
}
string src_path = cmd.get<string>("i");
int ks = cmd.get<int>("k");
const char * winName[] = {"input", "adaptive bilateral CPU", "adaptive bilateral OpenCL", "bilateralFilter OpenCL"};
Mat src = imread(src_path);
Mat abFilterCPU;
if(src.empty()){
//cout << "error read image: " << src_path << endl;
return -1;
Mat src = imread(src_path), abFilterCPU;
if (src.empty())
{
cout << "error read image: " << src_path << endl;
return EXIT_FAILURE;
}
ocl::oclMat dsrc(src), dABFilter, dBFilter;
@ -32,17 +42,12 @@ int main( int argc, const char** argv )
ocl::adaptiveBilateralFilter(dsrc, dABFilter, ksize, 10);
ocl::bilateralFilter(dsrc, dBFilter, ks, 30, 9);
Mat abFilter = dABFilter;
Mat bFilter = dBFilter;
Mat abFilter = dABFilter, bFilter = dBFilter;
imshow(winName[0], src);
imshow(winName[1], abFilterCPU);
imshow(winName[2], abFilter);
imshow(winName[3], bFilter);
waitKey();
return 0;
return EXIT_SUCCESS;
}

View File

@ -14,7 +14,6 @@ using namespace cv::ocl;
int main(int argc, const char** argv)
{
cv::CommandLineParser cmd(argc, argv,
"{ c | camera | false | use camera }"
"{ f | file | 768x576.avi | input video file }"
@ -26,7 +25,7 @@ int main(int argc, const char** argv)
cout << "Usage : bgfg_segm [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return 0;
return EXIT_SUCCESS;
}
bool useCamera = cmd.get<bool>("camera");
@ -36,13 +35,12 @@ int main(int argc, const char** argv)
if (method != "mog" && method != "mog2")
{
cerr << "Incorrect method" << endl;
return -1;
return EXIT_FAILURE;
}
int m = method == "mog" ? M_MOG : M_MOG2;
VideoCapture cap;
if (useCamera)
cap.open(0);
else
@ -50,8 +48,8 @@ int main(int argc, const char** argv)
if (!cap.isOpened())
{
cerr << "can not open camera or video file" << endl;
return -1;
cout << "can not open camera or video file" << endl;
return EXIT_FAILURE;
}
Mat frame;
@ -62,15 +60,11 @@ int main(int argc, const char** argv)
cv::ocl::MOG mog;
cv::ocl::MOG2 mog2;
oclMat d_fgmask;
oclMat d_fgimg;
oclMat d_bgimg;
oclMat d_fgmask, d_fgimg, d_bgimg;
d_fgimg.create(d_frame.size(), d_frame.type());
Mat fgmask;
Mat fgimg;
Mat bgimg;
Mat fgmask, fgimg, bgimg;
switch (m)
{
@ -83,7 +77,7 @@ int main(int argc, const char** argv)
break;
}
for(;;)
for (;;)
{
cap >> frame;
if (frame.empty())
@ -123,10 +117,9 @@ int main(int argc, const char** argv)
if (!bgimg.empty())
imshow("mean background image", bgimg);
int key = waitKey(30);
if (key == 27)
if (27 == waitKey(30))
break;
}
return 0;
return EXIT_SUCCESS;
}

View File

@ -9,15 +9,13 @@ using namespace std;
Ptr<CLAHE> pFilter;
int tilesize;
int cliplimit;
string outfile;
static void TSize_Callback(int pos)
{
if(pos==0)
{
pFilter->setTilesGridSize(Size(1,1));
}
pFilter->setTilesGridSize(Size(tilesize,tilesize));
else
pFilter->setTilesGridSize(Size(tilesize,tilesize));
}
static void Clip_Callback(int)
@ -31,63 +29,64 @@ int main(int argc, char** argv)
"{ i | input | | specify input image }"
"{ c | camera | 0 | specify camera id }"
"{ s | use_cpu | false | use cpu algorithm }"
"{ o | output | clahe_output.jpg | specify output save path}";
"{ o | output | clahe_output.jpg | specify output save path}"
"{ h | help | false | print help message }";
CommandLineParser cmd(argc, argv, keys);
string infile = cmd.get<string>("i");
outfile = cmd.get<string>("o");
cv::CommandLineParser cmd(argc, argv, keys);
if (cmd.get<bool>("help"))
{
cout << "Usage : clahe [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return EXIT_SUCCESS;
}
string infile = cmd.get<string>("i"), outfile = cmd.get<string>("o");
int camid = cmd.get<int>("c");
bool use_cpu = cmd.get<bool>("s");
CvCapture* capture = 0;
bool running = true;
namedWindow("CLAHE");
createTrackbar("Tile Size", "CLAHE", &tilesize, 32, (TrackbarCallback)TSize_Callback);
createTrackbar("Clip Limit", "CLAHE", &cliplimit, 20, (TrackbarCallback)Clip_Callback);
Mat frame, outframe;
ocl::oclMat d_outframe;
ocl::oclMat d_outframe, d_frame;
int cur_clip;
Size cur_tilesize;
if(use_cpu)
{
pFilter = createCLAHE();
}
else
{
pFilter = ocl::createCLAHE();
}
pFilter = use_cpu ? createCLAHE() : ocl::createCLAHE();
cur_clip = (int)pFilter->getClipLimit();
cur_tilesize = pFilter->getTilesGridSize();
setTrackbarPos("Tile Size", "CLAHE", cur_tilesize.width);
setTrackbarPos("Clip Limit", "CLAHE", cur_clip);
if(infile != "")
{
frame = imread(infile);
if(frame.empty())
{
cout << "error read image: " << infile << endl;
return -1;
return EXIT_FAILURE;
}
}
else
{
capture = cvCaptureFromCAM(camid);
}
cout << "\nControls:\n"
<< "\to - save output image\n"
<< "\tESC - exit\n";
while(running)
for (;;)
{
if(capture)
frame = cvQueryFrame(capture);
else
frame = imread(infile);
if(frame.empty())
{
continue;
}
if(use_cpu)
{
cvtColor(frame, frame, COLOR_BGR2GRAY);
@ -95,15 +94,18 @@ int main(int argc, char** argv)
}
else
{
ocl::oclMat d_frame(frame);
ocl::cvtColor(d_frame, d_outframe, COLOR_BGR2GRAY);
ocl::cvtColor(d_frame = frame, d_outframe, COLOR_BGR2GRAY);
pFilter->apply(d_outframe, d_outframe);
d_outframe.download(outframe);
}
imshow("CLAHE", outframe);
char key = (char)cvWaitKey(3);
if(key == 'o') imwrite(outfile, outframe);
else if(key == 27) running = false;
if(key == 'o')
imwrite(outfile, outframe);
else if(key == 27)
break;
}
return 0;
return EXIT_SUCCESS;
}

View File

@ -28,27 +28,29 @@ static void workBegin()
{
work_begin = getTickCount();
}
static void workEnd()
{
work_end += (getTickCount() - work_begin);
}
static double getTime()
{
return work_end /((double)cvGetTickFrequency() * 1000.);
}
void detect( Mat& img, vector<Rect>& faces,
static void detect( Mat& img, vector<Rect>& faces,
ocl::OclCascadeClassifierBuf& cascade,
double scale, bool calTime);
void detectCPU( Mat& img, vector<Rect>& faces,
static void detectCPU( Mat& img, vector<Rect>& faces,
CascadeClassifier& cascade,
double scale, bool calTime);
void Draw(Mat& img, vector<Rect>& faces, double scale);
static void Draw(Mat& img, vector<Rect>& faces, double scale);
// This function test if gpu_rst matches cpu_rst.
@ -56,7 +58,6 @@ void Draw(Mat& img, vector<Rect>& faces, double scale);
// Else if will return (total diff of each cpu and gpu rects covered pixels)/(total cpu rects covered pixels)
double checkRectSimilarity(Size sz, vector<Rect>& cpu_rst, vector<Rect>& gpu_rst);
int main( int argc, const char** argv )
{
const char* keys =
@ -72,10 +73,12 @@ int main( int argc, const char** argv )
CommandLineParser cmd(argc, argv, keys);
if (cmd.get<bool>("help"))
{
cout << "Usage : facedetect [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return 0;
return EXIT_SUCCESS;
}
CvCapture* capture = 0;
Mat frame, frameCopy, image;
@ -89,8 +92,8 @@ int main( int argc, const char** argv )
if( !cascade.load( cascadeName ) || !cpu_cascade.load(cascadeName) )
{
cerr << "ERROR: Could not load classifier cascade" << endl;
return -1;
cout << "ERROR: Could not load classifier cascade" << endl;
return EXIT_FAILURE;
}
if( inputName.empty() )
@ -99,25 +102,17 @@ int main( int argc, const char** argv )
if(!capture)
cout << "Capture from CAM 0 didn't work" << endl;
}
else if( inputName.size() )
else
{
image = imread( inputName, 1 );
image = imread( inputName, CV_LOAD_IMAGE_COLOR );
if( image.empty() )
{
capture = cvCaptureFromAVI( inputName.c_str() );
if(!capture)
cout << "Capture from AVI didn't work" << endl;
return -1;
return EXIT_FAILURE;
}
}
else
{
image = imread( "lena.jpg", 1 );
if(image.empty())
cout << "Couldn't read lena.jpg" << endl;
return -1;
}
cvNamedWindow( "result", 1 );
if( capture )
@ -134,24 +129,16 @@ int main( int argc, const char** argv )
frame.copyTo( frameCopy );
else
flip( frame, frameCopy, 0 );
if(useCPU)
{
detectCPU(frameCopy, faces, cpu_cascade, scale, false);
}
else
{
detect(frameCopy, faces, cascade, scale, false);
}
Draw(frameCopy, faces, scale);
if( waitKey( 10 ) >= 0 )
goto _cleanup_;
break;
}
waitKey(0);
_cleanup_:
cvReleaseCapture( &capture );
}
else
@ -164,9 +151,7 @@ _cleanup_:
{
cout << "loop" << i << endl;
if(useCPU)
{
detectCPU(image, faces, cpu_cascade, scale, i==0?false:true);
}
else
{
detect(image, faces, cascade, scale, i==0?false:true);

View File

@ -72,6 +72,14 @@ int main(int argc, char** argv)
"{ l |larger_win| false | use 64x128 window}"
"{ o | output | | specify output path when input is images}";
CommandLineParser cmd(argc, argv, keys);
if (cmd.get<bool>("help"))
{
cout << "Usage : hog [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return EXIT_SUCCESS;
}
App app(cmd);
try
{
@ -89,7 +97,7 @@ int main(int argc, char** argv)
{
return cout << "unknown exception" << endl, 1;
}
return 0;
return EXIT_SUCCESS;
}
App::App(CommandLineParser& cmd)

View File

@ -44,7 +44,8 @@ static void download(const oclMat& d_mat, vector<uchar>& vec)
d_mat.download(mat);
}
static void drawArrows(Mat& frame, const vector<Point2f>& prevPts, const vector<Point2f>& nextPts, const vector<uchar>& status, Scalar line_color = Scalar(0, 0, 255))
static void drawArrows(Mat& frame, const vector<Point2f>& prevPts, const vector<Point2f>& nextPts, const vector<uchar>& status,
Scalar line_color = Scalar(0, 0, 255))
{
for (size_t i = 0; i < prevPts.size(); ++i)
{
@ -104,7 +105,7 @@ int main(int argc, const char* argv[])
cout << "Usage: pyrlk_optical_flow [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return 0;
return EXIT_SUCCESS;
}
bool defaultPicturesFail = false;
@ -136,7 +137,7 @@ int main(int argc, const char* argv[])
Mat frame0Gray, frame1Gray;
Mat ptr0, ptr1;
if(vdofile == "")
if(vdofile.empty())
capture = cvCaptureFromCAM( inputName );
else
capture = cvCreateFileCapture(vdofile.c_str());
@ -144,14 +145,12 @@ int main(int argc, const char* argv[])
int c = inputName ;
if(!capture)
{
if(vdofile == "")
if(vdofile.empty())
cout << "Capture from CAM " << c << " didn't work" << endl;
else
cout << "Capture from file " << vdofile << " failed" <<endl;
if (defaultPicturesFail)
{
return -1;
}
return EXIT_FAILURE;
goto nocamera;
}
@ -212,12 +211,9 @@ int main(int argc, const char* argv[])
}
if( waitKey( 10 ) >= 0 )
goto _cleanup_;
break;
}
waitKey(0);
_cleanup_:
cvReleaseCapture( &capture );
}
else
@ -264,5 +260,5 @@ nocamera:
waitKey();
return 0;
return EXIT_SUCCESS;
}

View File

@ -13,9 +13,9 @@
using namespace cv;
using namespace std;
#define ACCURACY_CHECK 1
#define ACCURACY_CHECK
#if ACCURACY_CHECK
#ifdef ACCURACY_CHECK
// check if two vectors of vector of points are near or not
// prior assumption is that they are in correct order
static bool checkPoints(
@ -278,27 +278,31 @@ int main(int argc, char** argv)
{
const char* keys =
"{ i | input | | specify input image }"
"{ o | output | squares_output.jpg | specify output save path}";
"{ o | output | squares_output.jpg | specify output save path}"
"{ h | help | false | print help message }";
CommandLineParser cmd(argc, argv, keys);
string inputName = cmd.get<string>("i");
string outfile = cmd.get<string>("o");
if(inputName.empty())
if(cmd.get<bool>("help"))
{
cout << "Usage : squares [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return 0;
return EXIT_SUCCESS;
}
int iterations = 10;
namedWindow( wndname, 1 );
namedWindow( wndname, CV_LOAD_IMAGE_COLOR );
vector<vector<Point> > squares_cpu, squares_ocl;
Mat image = imread(inputName, 1);
if( image.empty() )
{
cout << "Couldn't load " << inputName << endl;
return -1;
return EXIT_FAILURE;
}
int j = iterations;
int64 t_ocl = 0, t_cpp = 0;
//warm-ups
@ -307,7 +311,7 @@ int main(int argc, char** argv)
findSquares_ocl(image, squares_ocl);
#if ACCURACY_CHECK
#ifdef ACCURACY_CHECK
cout << "Checking ocl accuracy ... " << endl;
cout << (checkPoints(squares_cpu, squares_ocl) ? "Pass" : "Failed") << endl;
#endif
@ -332,5 +336,5 @@ int main(int argc, char** argv)
imwrite(outfile, result);
cvWaitKey(0);
return 0;
return EXIT_SUCCESS;
}

View File

@ -76,8 +76,9 @@ int main(int argc, char** argv)
"{ l | left | | specify left image }"
"{ r | right | | specify right image }"
"{ m | method | BM | specify match method(BM/BP/CSBP) }"
"{ n | ndisp | 64 | specify number of disparity levels }"
"{ n | ndisp | 64 | specify number of disparity levels }"
"{ o | output | stereo_match_output.jpg | specify output path when input is images}";
CommandLineParser cmd(argc, argv, keys);
if (cmd.get<bool>("help"))
{
@ -85,6 +86,7 @@ int main(int argc, char** argv)
cmd.printParams();
return 0;
}
try
{
App app(cmd);
@ -96,7 +98,8 @@ int main(int argc, char** argv)
{
cout << "error: " << e.what() << endl;
}
return 0;
return EXIT_SUCCESS;
}
App::App(CommandLineParser& cmd)
@ -114,6 +117,7 @@ App::App(CommandLineParser& cmd)
<< "\t2/w - increase/decrease window size (for BM only)\n"
<< "\t3/e - increase/decrease iteration count (for BP and CSBP only)\n"
<< "\t4/r - increase/decrease level count (for BP and CSBP only)\n";
l_img = cmd.get<string>("l");
r_img = cmd.get<string>("r");
string mstr = cmd.get<string>("m");

View File

@ -14,21 +14,20 @@ const int LOOP_NUM = 10;
const int GOOD_PTS_MAX = 50;
const float GOOD_PORTION = 0.15f;
namespace
{
int64 work_begin = 0;
int64 work_end = 0;
void workBegin()
static void workBegin()
{
work_begin = getTickCount();
}
void workEnd()
static void workEnd()
{
work_end = getTickCount() - work_begin;
}
double getTime()
static double getTime()
{
return work_end /((double)cvGetTickFrequency() * 1000.);
}
@ -59,7 +58,7 @@ struct SURFMatcher
}
};
Mat drawGoodMatches(
static Mat drawGoodMatches(
const Mat& cpu_img1,
const Mat& cpu_img2,
const vector<KeyPoint>& keypoints1,
@ -129,7 +128,6 @@ Mat drawGoodMatches(
return img_matches;
}
}
////////////////////////////////////////////////////
// This program demonstrates the usage of SURF_OCL.
// use cpu findHomography interface to calculate the transformation matrix
@ -142,12 +140,14 @@ int main(int argc, char* argv[])
"{ o | output | SURF_output.jpg | specify output save path (only works in CPU or GPU only mode) }"
"{ c | use_cpu | false | use CPU algorithms }"
"{ a | use_all | false | use both CPU and GPU algorithms}";
CommandLineParser cmd(argc, argv, keys);
if (cmd.get<bool>("help"))
{
std::cout << "Usage: surf_matcher [options]" << std::endl;
std::cout << "Available options:" << std::endl;
cmd.printParams();
return 0;
return EXIT_SUCCESS;
}
Mat cpu_img1, cpu_img2, cpu_img1_grey, cpu_img2_grey;
@ -168,23 +168,17 @@ int main(int argc, char* argv[])
cvtColor(cpu_img2, cpu_img2_grey, CV_BGR2GRAY);
img2 = cpu_img2_grey;
if(useALL)
{
useCPU = false;
useGPU = false;
}
else if(useCPU==false && useALL==false)
{
if (useALL)
useCPU = useGPU = false;
else if(!useCPU && !useALL)
useGPU = true;
}
if(!useCPU)
{
std::cout
<< "Device name:"
<< cv::ocl::Context::getContext()->getDeviceInfo().deviceName
<< std::endl;
}
double surf_time = 0.;
//declare input/output
@ -330,5 +324,5 @@ int main(int argc, char* argv[])
imshow("ocl surf matches", ocl_img_matches);
}
waitKey(0);
return 0;
return EXIT_SUCCESS;
}

View File

@ -96,10 +96,9 @@ int main(int argc, const char* argv[])
cout << "Usage: pyrlk_optical_flow [options]" << endl;
cout << "Available options:" << endl;
cmd.printParams();
return 0;
return EXIT_SUCCESS;
}
bool defaultPicturesFail = false;
string fname0 = cmd.get<string>("l");
string fname1 = cmd.get<string>("r");
string vdofile = cmd.get<string>("v");
@ -113,22 +112,10 @@ int main(int argc, const char* argv[])
cv::Ptr<cv::DenseOpticalFlow> alg = cv::createOptFlow_DualTVL1();
cv::ocl::OpticalFlowDual_TVL1_OCL d_alg;
Mat flow, show_flow;
Mat flow_vec[2];
if (frame0.empty() || frame1.empty())
{
useCamera = true;
defaultPicturesFail = true;
CvCapture* capture = 0;
capture = cvCaptureFromCAM( inputName );
if (!capture)
{
cout << "Can't load input images" << endl;
return -1;
}
}
if (useCamera)
{
@ -137,22 +124,17 @@ int main(int argc, const char* argv[])
Mat frame0Gray, frame1Gray;
Mat ptr0, ptr1;
if(vdofile == "")
if(vdofile.empty())
capture = cvCaptureFromCAM( inputName );
else
capture = cvCreateFileCapture(vdofile.c_str());
int c = inputName ;
if(!capture)
{
if(vdofile == "")
cout << "Capture from CAM " << c << " didn't work" << endl;
if(vdofile.empty())
cout << "Capture from CAM " << inputName << " didn't work" << endl;
else
cout << "Capture from file " << vdofile << " failed" <<endl;
if (defaultPicturesFail)
{
return -1;
}
goto nocamera;
}
@ -206,12 +188,9 @@ int main(int argc, const char* argv[])
}
if( waitKey( 10 ) >= 0 )
goto _cleanup_;
break;
}
waitKey(0);
_cleanup_:
cvReleaseCapture( &capture );
}
else
@ -254,5 +233,5 @@ nocamera:
waitKey();
return 0;
return EXIT_SUCCESS;
}