opencv学习(十七)dilate()膨胀函数//erode()腐蚀函数

dilate()膨胀函数

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

erode()腐蚀函数

这里写图片描述
这里写图片描述
这里写图片描述

实例

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;


Mat g_srcimage, g_dstimage;
int g_nTrackbarNmuer = 0;//0表示腐蚀,1表示膨胀  
int g_nStructRlementSize = 3;//内核矩阵的尺寸      

//全局函数声明
void Process();//膨胀和腐蚀
void on_TrackbarNumChange(int, void*);
void on_ElementSizeChange(int, void*);


//
int main()
{
    system("color 5E");
    g_srcimage = imread("D://1.jpg");
    if (!g_srcimage.data) { printf("falsch\n"); return false; }
    //显示原图

    namedWindow("原始图");
    imshow("原始图", g_srcimage);

    //进行初次腐蚀效果显示
    namedWindow("after图");
    //定义核
    Mat element = getStructuringElement(MORPH_RECT, Size(2 * g_nStructRlementSize + 1, 2 * g_nStructRlementSize + 1), Point(g_nStructRlementSize, g_nStructRlementSize));
    erode(g_srcimage, g_srcimage, element);
    //imshow("after图", g_dstimage);干扰项,同意在process中显示

    //创建轨迹条
    createTrackbar("腐蚀/膨胀", "after图", &g_nTrackbarNmuer, 1, on_TrackbarNumChange);
    createTrackbar("内核尺寸", "after图", &g_nStructRlementSize, 21, on_ElementSizeChange);

    waitKey();

}


void Process()
{
    //获取自定义内核
    Mat element = getStructuringElement(MORPH_RECT, Size(2 * g_nStructRlementSize + 1, 2 * g_nStructRlementSize + 1), Point(g_nStructRlementSize, g_nStructRlementSize));
    if (g_nTrackbarNmuer == 0)
    {
        erode(g_srcimage, g_dstimage, element);
    }
    else 
    {
        dilate(g_srcimage, g_dstimage, element);
    }
    imshow("after图", g_dstimage);

}

//腐蚀膨胀开关切换函数
void on_TrackbarNumChange(int, void*)
{
    Process();//腐蚀膨胀效果切换(通过滑动条)后调用一次process函数,使得效果立刻呈现出来
}
void on_ElementSizeChange(int, void*)
{
    Process();//同上
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_41553038/article/details/80048510