?? morphology.c
字號:
#ifdef _CH_
#pragma package <opencv>
#endif
#ifndef _EiC
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
#endif
IplImage* src = 0;
IplImage* image = 0;
IplImage* dest = 0;
IplConvKernel* element = 0;
int element_shape = CV_SHAPE_RECT;
//the address of variable which receives trackbar position update
int open_pos=0, close_pos=0, erode_pos=0, dilate_pos=0;
//callback function for slider , implements opening
void Opening(int pos)
{
element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape, 0 );
cvErode(src,image,element,1);
cvDilate(image,dest,element,1);
cvReleaseStructuringElement(&element);
cvShowImage("Opening&Closing window",dest);
}
//callback function for slider , implements closing
void Closing(int pos)
{
element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape, 0 );
cvDilate(src,image,element,1);
cvErode(image,dest,element,1);
cvReleaseStructuringElement(&element);
cvShowImage("Opening&Closing window",dest);
}
//callback function for slider , implements erosion
void Erosion(int pos)
{
element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape, 0 );
cvErode(src,dest,element,1);
cvReleaseStructuringElement(&element);
cvShowImage("Erosion&Dilation window",dest);
}
//callback function for slider , implements dilation
void Dilation(int pos)
{
element = cvCreateStructuringElementEx( pos*2+1, pos*2+1, pos, pos, element_shape, 0 );
cvDilate(src,dest,element,1);
cvReleaseStructuringElement(&element);
cvShowImage("Erosion&Dilation window",dest);
}
int main( int argc, char** argv )
{
char* filename = argc == 2 ? argv[1] : (char*)"baboon.jpg";
if( (src = cvLoadImage(filename,1)) == 0 )
return -1;
image = cvCloneImage(src);
dest = cvCloneImage(src);
//create windows for output images
cvNamedWindow("Opening&Closing window",1);
cvNamedWindow("Erosion&Dilation window",1);
cvShowImage("Opening&Closing window",src);
cvShowImage("Erosion&Dilation window",src);
cvCreateTrackbar("Open","Opening&Closing window",&open_pos,10,Opening);
cvCreateTrackbar("Close","Opening&Closing window",&close_pos,10,Closing);
cvCreateTrackbar("Dilate","Erosion&Dilation window",&dilate_pos,10,Dilation);
cvCreateTrackbar("Erode","Erosion&Dilation window",&erode_pos,10,Erosion);
printf("This is interactive demo of morphological operations.\n"
"Move trackbars to change the structuring element size.\n"
"Press the following keys to exit or change element shape:\n"
"\tESC - exit the program\n"
"\tr - use rectangular element\n"
"\tc - use cross-shaped element\n"
"\te - use elliptic element\n"
"\tSPACE - switch between different element shapes\n" );
for(;;)
{
int c = cvWaitKey(0);
if( c == 27 )
break;
else if( c == 'e' )
element_shape = CV_SHAPE_ELLIPSE;
else if( c == 'r' )
element_shape = CV_SHAPE_RECT;
else if( c == 'c' )
element_shape = CV_SHAPE_CROSS;
else if( c == ' ' )
element_shape = (element_shape + 1) % 3;
/*Opening(open_pos);
Closing(close_pos);
Dilation(dilate_pos);
Erosion(erode_pos);*/
}
//releases header an dimage data
cvReleaseImage(&src);
cvReleaseImage(&image);
cvReleaseImage(&dest);
//destroys windows
cvDestroyWindow("Opening&Closing window");
cvDestroyWindow("Erosion&Dilation window");
return 0;
}
#ifdef _EiC
main(1,"morphology.c");
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -