+++ /dev/null
-char wndname[] = "Distance transform";\r
-char tbarname[] = "Threshold";\r
-int edge_thresh = 1;\r
-\r
-// Load the source image\r
-IPLIMAGE image = load_iplimage( "y2k.bmp" );\r
-\r
-// Create the output image\r
-IPLIMAGE dist = cvCreateImage( cvSize( image -> width, image -> height ), IPL_DEPTH_32F, 1 );\r
-IPLIMAGE dist8u1 = cvCreateImage( cvSize( image -> width, image -> height ), IPL_DEPTH_8U, 1 );\r
-IPLIMAGE dist8u2 = cvCreateImage( cvSize( image -> width, image -> height ), IPL_DEPTH_8U, 1 );\r
-IPLIMAGE dist8u = cvCreateImage( cvSize( image -> width, image -> height ), IPL_DEPTH_8U, 3 ); // Converted depth32f to depth8u\r
-IPLIMAGE dist32s = cvCreateImage( cvSize( image -> width, image -> height ), IPL_DEPTH_32S, 1 );\r
-\r
-// Convert to grayscale\r
-IPLIMAGE gray = cvCreateImage( cvSize(image->width, image->height), IPL_DEPTH_8U, 1 );\r
-IPLIMAGE edge = cvCreateImage( cvSize(image->width, image->height), IPL_DEPTH_8U, 1 ); // After Threshold\r
-cvCvtColor( image, gray, CV_BGR2GRAY );\r
-\r
-// define a trackbar callback\r
-void on_trackbar( int h )\r
-{\r
- int j;\r
- int distStep = dist -> widthStep / 4;\r
- float* currPointer;\r
- \r
- cvThreshold( gray, edge,\r
- ( float )( edge_thresh ),\r
- ( float )( edge_thresh ),\r
- CV_THRESH_BINARY );\r
- //Distance transform \r
- cvDistTransform( edge, dist,\r
- CV_DIST_L2,\r
- CV_DIST_MASK_5,\r
- NULL );\r
-\r
- cvConvertScale( dist, dist, 5000.0, 0 );\r
- \r
- for( j = 0, currPointer = dist -> imageData; j < dist -> height; j++, currPointer += distStep )\r
- {\r
- cvbSqrt( ( float* )( currPointer ),\r
- ( float* )( currPointer ),\r
- dist -> width ); \r
- }\r
- \r
- cvConvertScale( dist, dist32s, 1.0, 0.5 );\r
- cvAndS( dist32s, cvScalarAll(255), dist32s, 0 );\r
- cvConvertScale( dist32s, dist8u1, 1, 0 );\r
- cvConvertScale( dist32s, dist32s, -1, 0 );\r
- cvAddS( dist32s, cvScalarAll(255), dist32s, 0 );\r
- cvConvertScale( dist32s, dist8u2, 1, 0 );\r
- cvCvtPlaneToPix( dist8u1, dist8u2, dist8u2, 0, dist8u );\r
- show_iplimage( wndname, dist8u );\r
-}\r
-\r
-// Create a window\r
-named_window( wndname, 0 );\r
-\r
-// create a toolbar \r
-create_trackbar( tbarname, wndname, &edge_thresh, 255, on_trackbar );\r
-\r
-// Show the image\r
-on_trackbar( 0 );\r
-\r
-// Wait for a key stroke; the same function arranges events processing\r
-wait_key( 0 );\r
-cvReleaseImage( &image );\r
-cvReleaseImage( &gray );\r
-cvReleaseImage( &edge );\r
-cvReleaseImage( &dist );\r
-cvReleaseImage( &dist8u );\r
-cvReleaseImage( &dist8u1 );\r
-cvReleaseImage( &dist8u2 );\r
-cvReleaseImage( &dist32s );\r
-destroy_window( wndname );\r
-\r