--- /dev/null
+#include <iostream>
+#include "opencv2/core/core.hpp"
+#include "opencv2/imgproc/imgproc.hpp"
+#include "opencv2/highgui/highgui.hpp"
+#include "opencv2/ocl/ocl.hpp"
+using namespace cv;
+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));
+}
+
+static void Clip_Callback(int)
+{
+ pFilter->setClipLimit(cliplimit);
+}
+
+int main(int argc, char** argv)
+{
+ const char* keys =
+ "{ 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}";
+
+ CommandLineParser cmd(argc, argv, keys);
+ 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;
+
+ int cur_clip;
+ Size cur_tilesize;
+ if(use_cpu)
+ {
+ pFilter = createCLAHE();
+ }
+ else
+ {
+ pFilter = 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;
+ }
+ }
+ else
+ {
+ capture = cvCaptureFromCAM(camid);
+ }
+ cout << "\nControls:\n"
+ << "\to - save output image\n"
+ << "\tESC - exit\n";
+ while(running)
+ {
+ if(capture)
+ frame = cvQueryFrame(capture);
+ else
+ frame = imread(infile);
+ if(frame.empty())
+ {
+ continue;
+ }
+ if(use_cpu)
+ {
+ cvtColor(frame, frame, COLOR_BGR2GRAY);
+ pFilter->apply(frame, outframe);
+ }
+ else
+ {
+ ocl::oclMat d_frame(frame);
+ ocl::cvtColor(d_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;
+ }
+ return 0;
+}
radius = cvRound((r->width + r->height)*0.25*scale);
circle( img, center, radius, color, 3, 8, 0 );
}
- imshow( "result", img );
imwrite( outputName, img );
+ if(abs(scale-1.0)>.001)
+ {
+ resize(img, img, Size(img.cols/scale, img.rows/scale));
+ }
+ imshow( "result", img );
+
}
string vdo_source;
string output;
int camera_id;
+ bool write_once;
};
int main(int argc, char** argv)
<< "\tESC - exit\n"
<< "\tm - change mode GPU <-> CPU\n"
<< "\tg - convert image to gray or not\n"
+ << "\to - save output image once, or switch on/off video save\n"
<< "\t1/q - increase/decrease HOG scale\n"
<< "\t2/w - increase/decrease levels count\n"
<< "\t3/e - increase/decrease HOG group threshold\n"
hit_threshold = win_width == 48 ? 1.4 : 0.;
scale = 1.05;
gamma_corr = true;
+ write_once = false;
cout << "Group threshold: " << gr_threshold << endl;
cout << "Levels number: " << nlevels << endl;
workEnd();
- if (output!="")
+ if (output!="" && write_once)
{
if (img_source!="") // wirte image
{
+ write_once = false;
imwrite(output, img_to_show);
}
else //write video
gamma_corr = !gamma_corr;
cout << "Gamma correction: " << gamma_corr << endl;
break;
+ case 'o':
+ case 'O':
+ write_once = !write_once;
+ break;
}
}
return ss.str();
}
private:
- bool running;
+ bool running, write_once;
Mat left_src, right_src;
Mat left, right;
cout << "stereo_match_ocl sample\n";
cout << "\nControls:\n"
<< "\tesc - exit\n"
+ << "\to - save output image once\n"
<< "\tp - print current parameters\n"
<< "\tg - convert source images into gray\n"
<< "\tm - change stereo match method\n"
else cout << "unknown method!\n";
ndisp = cmd.get<int>("n");
out_img = cmd.get<string>("o");
+ write_once = false;
}
printParams();
running = true;
- bool written = false;
while (running)
{
-
// Prepare disparity map of specified type
Mat disp;
oclMat d_disp;
csbp(d_left, d_right, d_disp);
break;
}
+
// Show results
d_disp.download(disp);
workEnd();
+
if (method != BM)
{
disp.convertTo(disp, 0);
}
putText(disp, text(), Point(5, 25), FONT_HERSHEY_SIMPLEX, 1.0, Scalar::all(255));
imshow("disparity", disp);
- if(!written)
+ if(write_once)
{
imwrite(out_img, disp);
- written = true;
+ write_once = false;
}
handleKey((char)waitKey(3));
}
cout << "level_count: " << csbp.levels << endl;
}
break;
+ case 'o':
+ case 'O':
+ write_once = true;
+ break;
}
}