#include <stdio.h>
int voronoiType = -1;
int edgeThresh = 100;
static void onTrackbar( int, void* )
{
    static const Scalar colors[] =
     {
    };
    int maskSize = voronoiType >= 0 ? 
DIST_MASK_5 : maskSize0;
     int distType = voronoiType >= 0 ? 
DIST_L2 : distType0;
     Mat edge = gray >= edgeThresh, dist, labels, dist8u;
     if( voronoiType < 0 )
    else
    if( voronoiType < 0 )
    {
        
        dist *= 5000;
        Mat dist32s, dist8u1, dist8u2;
         dist32s &= Scalar::all(255);
        dist32s *= -1;
        dist32s += Scalar::all(255);
        Mat planes[] = {dist8u1, dist8u2, dist8u2};
         merge(planes, 3, dist8u);
     }
    else
    {
        dist8u.create(labels.size(), 
CV_8UC3);
        for( int i = 0; i < labels.rows; i++ )
        {
            const int* ll = (const int*)labels.ptr(i);
            const float* dd = (const float*)dist.ptr(i);
            for( int j = 0; j < labels.cols; j++ )
            {
                int idx = ll[j] == 0 || dd[j] == 0 ? 0 : (ll[j]-1)%8 + 1;
                float scale = 1.f/(1 + dd[j]*dd[j]*0.0004f);
                int b = 
cvRound(colors[idx][0]*scale);
                 int g = 
cvRound(colors[idx][1]*scale);
                 int r = 
cvRound(colors[idx][2]*scale);
             }
        }
    }
    imshow(
"Distance Map", dist8u );
 }
static void help()
{
    printf("\nProgram to demonstrate the use of the distance transform function between edge images.\n"
            "Usage:\n"
            "./distrans [image_name -- default image is stuff.jpg]\n"
            "\nHot keys: \n"
            "\tESC - quit the program\n"
            "\tC - use C/Inf metric\n"
            "\tL1 - use L1 metric\n"
            "\tL2 - use L2 metric\n"
            "\t3 - use 3x3 mask\n"
            "\t5 - use 5x5 mask\n"
            "\t0 - use precise distance transform\n"
            "\tv - switch to Voronoi diagram mode\n"
            "\tp - switch to pixel-based Voronoi diagram mode\n"
            "\tSPACE - loop through all the modes\n\n");
}
const char* keys =
{
    "{help h||}{@image |stuff.jpg|input image file}"
};
int main( int argc, const char** argv )
{
    help();
        return 0;
    string filename = parser.
get<
string>(0);
     if(gray.empty())
    {
        printf("Cannot read image file: %s\n", filename.c_str());
        help();
        return -1;
    }
    createTrackbar(
"Brightness Threshold", 
"Distance Map", &edgeThresh, 255, onTrackbar, 0);
     for(;;)
    {
        
        onTrackbar(0, 0);
        if( c == 27 )
            break;
        if( c == 'c' || c == 'C' || c == '1' || c == '2' ||
            c == '3' || c == '5' || c == '0' )
            voronoiType = -1;
        if( c == 'c' || c == 'C' )
        else if( c == '1' )
        else if( c == '2' )
        else if( c == '3' )
        else if( c == '5' )
        else if( c == '0' )
        else if( c == 'v' )
            voronoiType = 0;
        else if( c == 'p' )
            voronoiType = 1;
        else if( c == ' ' )
        {
            if( voronoiType == 0 )
                voronoiType = 1;
            else if( voronoiType == 1 )
            {
                voronoiType = -1;
            }
            else if( distType0 == 
DIST_C )
                 voronoiType = 0;
        }
    }
    return 0;
}