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();//同上
}