//-----------------------------------【腐蚀erode与膨胀dilate综合示例】----------------------------- // Written by Robotkang // Date:2018.06.23 //---------------------------------------------------------------------------------------------- #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> //标准输入输出流 using namespace std; using namespace cv; Mat g_srcImage,g_dstImage; int g_nTrackbarNumer = 0;//0表示腐蚀erode,1表示膨胀dilate int g_nStructElementSize =3;//内核矩阵的尺寸 void Process(); void on_TrackbarNumChange(int,void *); void on_ElementSizeChange(int,void *); void ShowHelpText(); int main() { system("color 5E");//改变console字体背景颜色 g_srcImage =imread("1.jpg"); if(!g_srcImage.data){ printf("error");return false;} ShowHelpText(); namedWindow("原始图"); imshow("原始图",g_srcImage); namedWindow("效果图"); Mat element = getStructuringElement(MORPH_RECT, Size(2*g_nStructElementSize+1,2*g_nStructElementSize+1),Point(g_nStructElementSize,g_nStructElementSize)); erode(g_srcImage,g_dstImage, element); imshow("效果图",g_srcImage); createTrackbar("腐蚀/膨胀","效果图",&g_nTrackbarNumer , 1 , on_TrackbarNumChange); createTrackbar("内核尺寸","效果图",&g_nStructElementSize,21,on_ElementSizeChange); cout<<endl<<"\t运行成功,请调整滚动条观察图像效果~\n\n" <<"\t按下“Q”键时,程序退出。\n"; while (char(waitKey(1))!='Q'){} return 0; } void Process() { Mat element = getStructuringElement(MORPH_RECT,Size(2*g_nStructElementSize+1,2+g_nStructElementSize+1),Point(g_nStructElementSize,g_nStructElementSize)); if(g_nTrackbarNumer==0){ erode(g_srcImage,g_dstImage,element); } else{ dilate(g_srcImage,g_dstImage,element); } imshow("效果图",g_dstImage); } void on_TrackbarNumChange(int,void *) { Process(); } void on_ElementSizeChange(int, void *) { Process(); } //-----------------------------------【ShowHelpText( )函数】----------------------------- // 描述:输出一些帮助信息 //---------------------------------------------------------------------------------------------- void ShowHelpText() { //输出欢迎信息和OpenCV版本 printf("\n\n\t\t\t 《OpenCV3编程入门》\n"); printf("\n\n\t\t\t此为本书OpenCV2版的第40个配套示例程序\n"); printf("\n\n\t\t\t 当前使用的OpenCV版本为:" CV_VERSION ); printf("\n\n\t\t\t www.robotkang.cc"); printf("\n\n ----------------------------------------------------------------------------\n"); }
运行效果:
----------------------------------------------------------------------------
---------------------------------------------------------------------------