您的位置:首页 > 博客中心 > 数据库 >

EBS安装完毕后,对数据库相关配置的修改

时间:2022-03-10 16:58

gxlsystem.com,gxl网

有没有很熟悉这张图?没错,这就是最近热映的电影Captain America~

下面这张图的效果就有些凶残了:

gxlsystem.com,gxl网

OK,截图先看到这里。在正文之前先来唠唠和主题相关的事情。


第一件事,OpenCV最新版本更新到了2.4.9。


在写这篇博文的两天之前(4月25日上午),OpenCV官网页面显示最新版本还是2.4.8,但是通过浅墨细心地发现,文档页面的标题已经悄悄而低调地改成了2.4.9.所以我们当时应该可以去断定,OpenCV2.4.9应该马上就要和我们见面了。

 gxlsystem.com,gxl网

果然,OpenCV2.4.9就在两天后(4月27日),正式在OpenCV官方网站上上线了。现在转到OpenCV的官方主页,赫然发现最新版本已然显示为2.4.9:

gxlsystem.com,gxl网

这是OpenCV的官方主页传送门:

大家可以自己前去看看以及下载最新版本的OpenCV。如果不出意外的话呢,下次文章我们就将紧跟时代,用上最新版本的OpenCV2.4.9进行讲解和程序的书写,所以,大家在看这篇文章之后呢,可以去下载当前最新的2.4.9版本并装上配置好。




 

 OK,我们开始讲解。





1.1 开运算(Opening Operation)

 



开运算(Opening Operation),其实就是先腐蚀后膨胀的过程。其数学表达式如下:


gxlsystem.com,gxl网



开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。效果图是这样的:

gxlsystem.com,gxl网

实际效果图:

gxlsystem.com,gxl网

 




1.2 闭运算(Closing Operation)


先膨胀后腐蚀的过程称为闭运算(Closing Operation),其数学表达式如下:

 gxlsystem.com,gxl网

闭运算能够排除小型黑洞(黑色区域)。效果图如下所示:

 gxlsystem.com,gxl网

实际效果图:

gxlsystem.com,gxl网





1.3 形态学梯度(MorphologicalGradient)


形态学梯度(Morphological Gradient)为膨胀图与腐蚀图之差,数学表达式如下:

gxlsystem.com,gxl网

 

对二值图像进行这一操作可以将团块(blob)的边缘突出出来。我们可以用形态学梯度来保留物体的边缘轮廓,如下所示:

 gxlsystem.com,gxl网

实际素材效果图:

gxlsystem.com,gxl网





1.4 顶帽(Top Hat)


顶帽运算(Top Hat)又常常被译为”礼帽“运算。为原图像与上文刚刚介绍的“开运算“的结果图之差,数学表达式如下:

gxlsystem.com,gxl网

因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此,从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。

顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

如下所示:

gxlsystem.com,gxl网

素材效果图:

gxlsystem.com,gxl网

 

 



1.5 黑帽(Black Hat)



黑帽(Black Hat)运算为”闭运算“的结果图与原图像之差。数学表达式为:


gxlsystem.com,gxl网

黑帽运算后的效果图突出了比原图轮廓周围的区域更暗的区域,且这一操作和选择的核的大小相关。

所以,黑帽运算用来分离比邻近点暗一些的斑块。非常完美的轮廓效果图:

 gxlsystem.com,gxl网

实际素材效果图:

gxlsystem.com,gxl网





 

//-----------------------------------【erode()函数中文注释版源代码】---------------------------- // 说明:以下代码为来自于计算机开源视觉库OpenCV的官方源代码 // OpenCV源代码版本:2.4.8 // 源码路径:…\opencv\sources\modules\imgproc\src\morph.cpp // 源文件中如下代码的起始行数:1369行 // 中文注释by浅墨 //-------------------------------------------------------------------------------------------------------- void cv::morphologyEx( InputArray _src,OutputArray _dst, int op, InputArray kernel, Pointanchor, int iterations, int borderType, constScalar& borderValue ) { //拷贝Mat数据到临时变量 Mat src = _src.getMat(), temp; _dst.create(src.size(), src.type()); Mat dst = _dst.getMat(); //一个大switch,根据不同的标识符取不同的操作 switch( op ) { case MORPH_ERODE: erode( src, dst, kernel, anchor, iterations, borderType, borderValue ); break; case MORPH_DILATE: dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); break; case MORPH_OPEN: erode( src, dst, kernel, anchor, iterations, borderType, borderValue ); dilate( dst, dst, kernel, anchor, iterations, borderType, borderValue ); break; case CV_MOP_CLOSE: dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); erode( dst, dst, kernel, anchor, iterations, borderType, borderValue ); break; case CV_MOP_GRADIENT: erode( src, temp, kernel, anchor, iterations, borderType, borderValue ); dilate( src, dst, kernel, anchor, iterations, borderType, borderValue ); dst -= temp; break; case CV_MOP_TOPHAT: if( src.data != dst.data ) temp = dst; erode( src, temp, kernel, anchor, iterations, borderType, borderValue ); dilate( temp, temp, kernel, anchor,iterations, borderType, borderValue ); dst = src - temp; break; case CV_MOP_BLACKHAT: if( src.data != dst.data ) temp = dst; dilate( src, temp, kernel, anchor, iterations, borderType, borderValue); erode( temp, temp, kernel, anchor, iterations, borderType, borderValue); dst = temp - src; break; default: CV_Error( CV_StsBadArg, "unknown morphological operation" ); } }

C++: void morphologyEx( InputArray src, OutputArray dst, int op, InputArraykernel, Pointanchor=Point(-1,-1), intiterations=1, intborderType=BORDER_CONSTANT, constScalar& borderValue=morphologyDefaultBorderValue() );

  • 第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下五种之一:CV_8U, CV_16U,CV_16S, CV_32F 或CV_64F。
  • 第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
  • 第三个参数,int类型的op,表示形态学运算的类型,可以是如下之一的标识符:
    • MORPH_OPEN – 开运算(Opening operation)
    • MORPH_CLOSE – 闭运算(Closing operation)
    • MORPH_GRADIENT -形态学梯度(Morphological gradient)
    • MORPH_TOPHAT - “顶帽”(“Top hat”)
    • MORPH_BLACKHAT - “黑帽”(“Black hat“)

int g_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸 //获取自定义核 Mat element =getStructuringElement(MORPH_RECT, Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1), Point(g_nStructElementSize, g_nStructElementSize ));

//-----------------------------------【头文件包含部分】--------------------------------------- // 描述:包含程序所依赖的头文件 //---------------------------------------------------------------------------------------------- #include <opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> //-----------------------------------【命名空间声明部分】--------------------------------------- // 描述:包含程序所使用的命名空间 //----------------------------------------------------------------------------------------------- using namespace cv; //-----------------------------------【main( )函数】-------------------------------------------- // 描述:控制台应用程序的入口函数,我们的程序从这里开始 //----------------------------------------------------------------------------------------------- int main( ) { //载入原始图 Mat image = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图 //创建窗口 namedWindow("【原始图】开运算"); namedWindow("【效果图】开运算"); //显示原始图 imshow("【原始图】开运算", image); //定义核 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); //进行形态学操作 morphologyEx(image,image, MORPH_OPEN, element); //显示效果图 imshow("【效果图】开运算", image); waitKey(0); return 0; }
运行效果图:

gxlsystem.com,gxl网






3.3 闭运算示例程序



OpenCV中调用morphologyEx函数进行闭运算操作的示例程序如下:


//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
 
//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
       //载入原始图  
       Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图
       //创建窗口  
       namedWindow("【原始图】闭运算"); 
       namedWindow("【效果图】闭运算"); 
       //显示原始图 
       imshow("【原始图】闭运算", image); 
       //定义核
       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
       //进行形态学操作
       morphologyEx(image,image, MORPH_CLOSE, element);
       //显示效果图 
       imshow("【效果图】闭运算", image); 
 
       waitKey(0); 
 
       return 0; 
}

运行效果图:

gxlsystem.com,gxl网




3.4 形态学梯度示例程序



OpenCV中调用morphologyEx函数进行形态学梯度操作的示例程序如下:

//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
 
//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
       //载入原始图  
       Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图
       //创建窗口  
       namedWindow("【原始图】形态学梯度"); 
       namedWindow("【效果图】形态学梯度"); 
       //显示原始图 
       imshow("【原始图】形态学梯度", image); 
       //定义核
       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
       //进行形态学操作
       morphologyEx(image,image, MORPH_GRADIENT, element);
       //显示效果图 
       imshow("【效果图】形态学梯度", image); 
 
       waitKey(0); 
 
       return 0; 
}

运行效果图:

gxlsystem.com,gxl网





3.5 顶帽运算(Top Hat)示例程序



OpenCV中调用morphologyEx函数进行顶帽运算操作的示例程序如下:

//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
 
//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
       //载入原始图  
       Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图
       //创建窗口  
       namedWindow("【原始图】顶帽运算"); 
       namedWindow("【效果图】顶帽运算"); 
       //显示原始图 
       imshow("【原始图】顶帽运算", image); 
       //定义核
       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
       //进行形态学操作
       morphologyEx(image,image, MORPH_TOPHAT, element);
       //显示效果图 
       imshow("【效果图】顶帽运算", image); 
 
       waitKey(0); 
 
       return 0; 
}

运行效果图:

gxlsystem.com,gxl网



3.6 黑帽运算(BlackHat)示例程序


OpenCV中调用morphologyEx函数进行黑帽运算操作的示例程序如下:

//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
 
//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
       //载入原始图  
       Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图
       //创建窗口  
       namedWindow("【原始图】黑帽运算"); 
       namedWindow("【效果图】黑帽运算"); 
       //显示原始图 
       imshow("【原始图】黑帽运算", image); 
       //定义核
       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
       //进行形态学操作
       morphologyEx(image,image, MORPH_BLACKHAT, element);
       //显示效果图 
       imshow("【效果图】黑帽运算", image); 
 
       waitKey(0); 
 
       return 0; 
}

运行效果图:

gxlsystem.com,gxl网


 



3.7 腐蚀(morphologyEx调用版)示例程序



OpenCV中调用morphologyEx函数进行腐蚀操作的示例程序如下:

//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
 
//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
       //载入原始图  
       Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图
       //创建窗口  
       namedWindow("【原始图】腐蚀"); 
       namedWindow("【效果图】腐蚀"); 
       //显示原始图 
       imshow("【原始图】腐蚀", image); 
       //定义核
       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
       //进行形态学操作
       morphologyEx(image,image, MORPH_ERODE, element);
       //显示效果图 
       imshow("【效果图】腐蚀", image); 
 
       waitKey(0); 
 
       return 0; 
}

运行效果图:

gxlsystem.com,gxl网


 



3.8 膨胀(morphologyEx调用版)示例程序



OpenCV中调用morphologyEx函数进行膨胀操作的示例程序如下:

//-----------------------------------【头文件包含部分】---------------------------------------
//            描述:包含程序所依赖的头文件
//----------------------------------------------------------------------------------------------
#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
 
//-----------------------------------【命名空间声明部分】---------------------------------------
//            描述:包含程序所使用的命名空间
//-----------------------------------------------------------------------------------------------
using namespace cv;
//-----------------------------------【main( )函数】--------------------------------------------
//            描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
       //载入原始图  
       Mat image = imread("1.jpg");  //工程目录下应该有一张名为1.jpg的素材图
       //创建窗口  
       namedWindow("【原始图】膨胀"); 
       namedWindow("【效果图】膨胀"); 
       //显示原始图 
       imshow("【原始图】膨胀", image); 
       //定义核
       Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); 
       //进行形态学操作
       morphologyEx(image,image, MORPH_DILATE, element);
       //显示效果图 
       imshow("【效果图】膨胀", image); 
 
       waitKey(0); 
 
       return 0; 
}

运行效果图:

gxlsystem.com,gxl网


 











废话不多说,上代码吧:


//-----------------------------------【程序说明】----------------------------------------------
//		程序名称::《【OpenCV入门教程之十一】形态学图像处理(一):膨胀与腐蚀  》 博文配套源码 
//		开发所用IDE版本:Visual Studio 2010
//   		开发所用OpenCV版本:	2.4.8
//		2014年4月25日 Create by 浅墨
//----------------------------------------------------------------------------------------------

//-----------------------------------【头文件包含部分】---------------------------------------
//		描述:包含程序所依赖的头文件
//---------------------------------------------------------------------------------------------- 
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

//-----------------------------------【命名空间声明部分】--------------------------------------
//		描述:包含程序所使用的命名空间
//----------------------------------------------------------------------------------------------- 
using namespace std;
using namespace cv;


//-----------------------------------【全局变量声明部分】--------------------------------------
//		描述:全局变量声明
//-----------------------------------------------------------------------------------------------
Mat g_srcImage, g_dstImage;//原始图和效果图
int g_nElementShape = MORPH_RECT;//元素结构的形状

//变量接收的TrackBar位置参数
int g_nMaxIterationNum = 10;
int g_nOpenCloseNum = 0;
int g_nErodeDilateNum = 0;
int g_nTopBlackHatNum = 0;



//-----------------------------------【全局函数声明部分】--------------------------------------
//		描述:全局函数声明
//-----------------------------------------------------------------------------------------------
static void on_OpenClose(int, void*);//回调函数
static void on_ErodeDilate(int, void*);//回调函数
static void on_TopBlackHat(int, void*);//回调函数
static void ShowHelpText();//帮助文字显示


//-----------------------------------【main( )函数】--------------------------------------------
//		描述:控制台应用程序的入口函数,我们的程序从这里开始
//-----------------------------------------------------------------------------------------------
int main( )
{
	//改变console字体颜色
	system("color 2F");  

	ShowHelpText();

	//载入原图
	g_srcImage = imread("1.jpg");//工程目录下需要有一张名为1.jpg的素材图
	if( !g_srcImage.data ) { printf("Oh,no,读取srcImage错误~! \n"); return false; }

	//显示原始图
	namedWindow("【原始图】");
	imshow("【原始图】", g_srcImage);

	//创建三个窗口
	namedWindow("【开运算/闭运算】",1);
	namedWindow("【腐蚀/膨胀】",1);
	namedWindow("【顶帽/黑帽】",1);

	//参数赋值
	g_nOpenCloseNum=9;
	g_nErodeDilateNum=9;
	g_nTopBlackHatNum=2;

	//分别为三个窗口创建滚动条
	createTrackbar("迭代值", "【开运算/闭运算】",&g_nOpenCloseNum,g_nMaxIterationNum*2+1,on_OpenClose);
	createTrackbar("迭代值", "【腐蚀/膨胀】",&g_nErodeDilateNum,g_nMaxIterationNum*2+1,on_ErodeDilate);
	createTrackbar("迭代值", "【顶帽/黑帽】",&g_nTopBlackHatNum,g_nMaxIterationNum*2+1,on_TopBlackHat);

	//轮询获取按键信息
	while(1)
	{
		int c;

		//执行回调函数
		on_OpenClose(g_nOpenCloseNum, 0);
		on_ErodeDilate(g_nErodeDilateNum, 0);
		on_TopBlackHat(g_nTopBlackHatNum,0);

		//获取按键
		c = waitKey(0);

		//按下键盘按键Q或者ESC,程序退出
		if( (char)c == ‘q‘||(char)c == 27 )
			break;
		//按下键盘按键1,使用椭圆(Elliptic)结构元素结构元素MORPH_ELLIPSE
		if( (char)c == 49 )//键盘按键1的ASII码为49
			g_nElementShape = MORPH_ELLIPSE;
		//按下键盘按键2,使用矩形(Rectangle)结构元素MORPH_RECT
		else if( (char)c == 50 )//键盘按键2的ASII码为50
			g_nElementShape = MORPH_RECT;
		//按下键盘按键3,使用十字形(Cross-shaped)结构元素MORPH_CROSS
		else if( (char)c == 51 )//键盘按键3的ASII码为51
			g_nElementShape = MORPH_CROSS;
		//按下键盘按键space,在矩形、椭圆、十字形结构元素中循环
		else if( (char)c == ‘ ‘ )
			g_nElementShape = (g_nElementShape + 1) % 3;
	}

	return 0;
}


//-----------------------------------【on_OpenClose( )函数】----------------------------------
//		描述:【开运算/闭运算】窗口的回调函数
//-----------------------------------------------------------------------------------------------
static void on_OpenClose(int, void*)
{
	//偏移量的定义
	int offset = g_nOpenCloseNum - g_nMaxIterationNum;//偏移量
	int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值
	//自定义核
	Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset*2+1, Absolute_offset*2+1), Point(Absolute_offset, Absolute_offset) );
	//进行操作
	if( offset < 0 )
		morphologyEx(g_srcImage, g_dstImage, CV_MOP_OPEN, element);
	else
		morphologyEx(g_srcImage, g_dstImage, CV_MOP_CLOSE, element);
	//显示图像
	imshow("【开运算/闭运算】",g_dstImage);
}


//-----------------------------------【on_ErodeDilate( )函数】----------------------------------
//		描述:【腐蚀/膨胀】窗口的回调函数
//-----------------------------------------------------------------------------------------------
static void on_ErodeDilate(int, void*)
{
	//偏移量的定义
	int offset = g_nErodeDilateNum - g_nMaxIterationNum;	//偏移量
	int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值
	//自定义核
	Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset*2+1, Absolute_offset*2+1), Point(Absolute_offset, Absolute_offset) );
	//进行操作
	if( offset < 0 )
		erode(g_srcImage, g_dstImage, element);
	else
		dilate(g_srcImage, g_dstImage, element);
	//显示图像
	imshow("【腐蚀/膨胀】",g_dstImage);
}


//-----------------------------------【on_TopBlackHat( )函数】--------------------------------
//		描述:【顶帽运算/黑帽运算】窗口的回调函数
//----------------------------------------------------------------------------------------------
static void on_TopBlackHat(int, void*)
{
	//偏移量的定义
	int offset = g_nTopBlackHatNum - g_nMaxIterationNum;//偏移量
	int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值
	//自定义核
	Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset*2+1, Absolute_offset*2+1), Point(Absolute_offset, Absolute_offset) );
	//进行操作
	if( offset < 0 )
		morphologyEx(g_srcImage, g_dstImage, MORPH_TOPHAT , element);
	else
		morphologyEx(g_srcImage, g_dstImage, MORPH_BLACKHAT, element);
	//显示图像
	imshow("【顶帽/黑帽】",g_dstImage);
}

//-----------------------------------【ShowHelpText( )函数】----------------------------------
//		描述:输出一些帮助信息
//----------------------------------------------------------------------------------------------
static void ShowHelpText()
{
//输出一些帮助信息
	printf("\n\n\n\t请调整滚动条观察图像效果~\n\n");
	printf( "\n\n\t按键操作说明: \n\n"
		"\t\t键盘按键【ESC】或者【Q】- 退出程序\n"
		"\t\t键盘按键【1】- 使用椭圆(Elliptic)结构元素\n"
		"\t\t键盘按键【2】- 使用矩形(Rectangle )结构元素\n"
		"\t\t键盘按键【3】- 使用十字型(Cross-shaped)结构元素\n"
		"\t\t键盘按键【空格SPACE】- 在矩形、椭圆、十字形结构元素中循环\n"
		"\n\n\t\t\t\t\t\t\t\t by浅墨"
		);
}

放出一些效果图:

首先是原图:

gxlsystem.com,gxl网

非常帅气的Captain America有木有!

腐蚀效果图:

gxlsystem.com,gxl网

膨胀效果图:

gxlsystem.com,gxl网


开运算效果图:

gxlsystem.com,gxl网


闭运算效果图:

gxlsystem.com,gxl网


顶帽运算效果图:

gxlsystem.com,gxl网

黑帽运算效果图:

gxlsystem.com,gxl网


好的,就放出这些效果图吧,具体更多的运行效果大家就自己下载示例程序回去玩~

 

本篇文章的配套源代码请点击这里下载:



OK,今天的内容大概就是这些,我们下篇文章见:)

gxlsystem.com,gxl网



热门排行

今日推荐

热门手游