CLAHE

 
       
#include
#include "opencv2/core/core.hpp"
#include "opencv2/core/utility.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 ;
static void TSize_Callback ( int pos )
{
     if ( pos == 0 )
         pFilter -> setTilesGridSize ( Size ( 1 , 1 ));
     else
         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}"
         "{ h help | false | print help message }" ;
     cv :: CommandLineParser cmd ( argc , argv , keys );
     if ( cmd . has ( "help" ))
     {
         cout << "Usage : clahe [options]" << endl ;
         cout << "Available options:" << endl ;
         cmd . printMessage ();
         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" );
     VideoCapture capture ;
     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 , d_frame ;
     int cur_clip ;
     Size cur_tilesize ;
     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 EXIT_FAILURE ;
         }
     }
     else
         capture . open ( camid );
     cout << " \n Controls: \n "
          << " \t o - save output image \n "
          << " \t ESC - exit \n " ;
     for (;;)
     {
         if ( capture . isOpened ())
             capture . read ( frame );
         else
             frame = imread ( infile );
         if ( frame . empty ())
             continue ;
         if ( use_cpu )
         {
             cvtColor ( frame , frame , COLOR_BGR2GRAY );
             pFilter -> apply ( frame , outframe );
         }
         else
         {
             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 ) waitKey ( 3 );
         if ( key == 'o' )
             imwrite ( outfile , outframe );
         else if ( key == 27 )
             break ;
     }
     return EXIT_SUCCESS ;
}

你可能感兴趣的:(研究方向,C/C++,图像处理)