⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 morphology.c

📁 OpenCV means Intel&reg Open Source Computer Vision Library. It is a collection of C functions and a
💻 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
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -