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

📄 8-5.cpp

📁 基于OpenCV的计算机视觉技术实现.rar
💻 CPP
字号:

// ************************* 程序 8-5 ****************************
/*** 程序功能:
    对图像进行膨胀、腐蚀、开和闭运算

// ***************************************************************/


//
/*



#include "cv.h"
#include "highgui.h"
#include <stdlib.h>
#include <stdio.h>


IplImage *src = 0;
IplImage *image = 0;
IplImage *dest = 0;

IplConvKernel *element = 0;
const int element_shape = CV_SHAPE_RECT;

//全局变量,调整图像膨胀腐蚀参数
int global_pos = 0;

//开运算 
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 );
}   

//闭运算
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 );
}

//腐蚀
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 );
}

//膨胀
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 * ) "test.jpg";
    if ( ( src = cvLoadImage ( filename, 1 ) ) == 0 )
    {
        return -1;
    }

    image = cvCloneImage ( src );
    dest = cvCloneImage ( src );

    //创建窗口
    cvNamedWindow ( "Opening&Closing window", 1 );
    cvNamedWindow ( "Erosion&Dilation window", 1 );

    cvShowImage ( "Opening&Closing window", src );
    cvShowImage ( "Erosion&Dilation window", src );

    //以函数名作为参数,trackbar调用函数,在函数中进行图像处理,global_pos引用传值当前滑块位置到pos。
    cvCreateTrackbar ( "Open", "Opening&Closing window", &global_pos, 10, Opening );
    cvCreateTrackbar ( "Close", "Opening&Closing window", &global_pos, 10, Closing );
    cvCreateTrackbar ( "Dilate", "Erosion&Dilation window", &global_pos, 10, Dilation );
    cvCreateTrackbar ( "Erode", "Erosion&Dilation window", &global_pos, 10, Erosion );

    cvWaitKey ( 0 );
    //释放图像数据 
    cvReleaseImage ( &src );
    cvReleaseImage ( &image );
    cvReleaseImage ( &dest );
    //释放窗口
    cvDestroyWindow ( "Opening&Closing window" ); 
    cvDestroyWindow ( "Erosion&Dilation window" ); 

    return 0;
}


  //*/

⌨️ 快捷键说明

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