morphology.c
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:3k
源码类别:

OpenCV

开发平台:

Visual C++

  1. #include <cv.h>
  2. #include <highgui.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. IplImage* src = 0;
  6. IplImage* dst = 0;
  7. IplConvKernel* element = 0;
  8. int element_shape = CV_SHAPE_RECT;
  9. //the address of variable which receives trackbar position update 
  10. int max_iters = 10;
  11. int open_close_pos = 0;
  12. int erode_dilate_pos = 0;
  13. // callback function for open/close trackbar
  14. void OpenClose(int pos)   
  15. {
  16.     int n = open_close_pos - max_iters;
  17.     int an = n > 0 ? n : -n;
  18.     element = cvCreateStructuringElementEx( an*2+1, an*2+1, an, an, element_shape, 0 );
  19.     if( n < 0 )
  20.     {
  21.         cvErode(src,dst,element,1);
  22.         cvDilate(dst,dst,element,1);
  23.     }
  24.     else
  25.     {
  26.         cvDilate(src,dst,element,1);
  27.         cvErode(dst,dst,element,1);
  28.     }
  29.     cvReleaseStructuringElement(&element);
  30.     cvShowImage("Open/Close",dst);
  31. }   
  32. // callback function for erode/dilate trackbar
  33. void ErodeDilate(int pos)   
  34. {
  35.     int n = erode_dilate_pos - max_iters;
  36.     int an = n > 0 ? n : -n;
  37.     element = cvCreateStructuringElementEx( an*2+1, an*2+1, an, an, element_shape, 0 );
  38.     if( n < 0 )
  39.     {
  40.         cvErode(src,dst,element,1);
  41.     }
  42.     else
  43.     {
  44.         cvDilate(src,dst,element,1);
  45.     }
  46.     cvReleaseStructuringElement(&element);
  47.     cvShowImage("Erode/Dilate",dst);
  48. }   
  49. int main( int argc, char** argv )
  50. {
  51.     char* filename = argc == 2 ? argv[1] : (char*)"baboon.jpg";
  52.     if( (src = cvLoadImage(filename,1)) == 0 )
  53.         return -1;
  54.     printf( "Hot keys: n"
  55.         "tESC - quit the programn"
  56.         "tr - use rectangle structuring elementn"
  57.         "te - use elliptic structuring elementn"
  58.         "tc - use cross-shaped structuring elementn"
  59.         "tENTER - loop through all the optionsn" );
  60.     dst = cvCloneImage(src);
  61.     //create windows for output images
  62.     cvNamedWindow("Open/Close",1);
  63.     cvNamedWindow("Erode/Dilate",1);
  64.     open_close_pos = erode_dilate_pos = max_iters;
  65.     cvCreateTrackbar("iterations", "Open/Close",&open_close_pos,max_iters*2+1,OpenClose);
  66.     cvCreateTrackbar("iterations", "Erode/Dilate",&erode_dilate_pos,max_iters*2+1,ErodeDilate);
  67.     for(;;)
  68.     {
  69.         int c;
  70.         
  71.         OpenClose(open_close_pos);
  72.         ErodeDilate(erode_dilate_pos);
  73.         c = cvWaitKey(0);
  74.         if( (char)c == 27 )
  75.             break;
  76.         if( (char)c == 'e' )
  77.             element_shape = CV_SHAPE_ELLIPSE;
  78.         else if( (char)c == 'r' )
  79.             element_shape = CV_SHAPE_RECT;
  80.         else if( (char)c == 'c' )
  81.             element_shape = CV_SHAPE_CROSS;
  82.         else if( (char)c == 'n' )
  83.             element_shape = (element_shape + 1) % 3;
  84.     }
  85.     //release images
  86.     cvReleaseImage(&src);
  87.     cvReleaseImage(&dst);
  88.     //destroy windows 
  89.     cvDestroyWindow("Open/Close"); 
  90.     cvDestroyWindow("Erode/Dilate"); 
  91.     return 0;
  92. }