• OpenCV——膨胀与腐蚀


    #include<opencv2/core/core.hpp>
    #include<opencv2/imgproc/imgproc.hpp>
    #include<opencv2/highgui/highgui.hpp>
    #include<opencv2/opencv.hpp>
    #include<iostream>
    
    using namespace cv;
    using namespace std;
    
    //全局变量声明********************************
    Mat g_srcImage, g_dstImage;
    int g_nTrackbarNumber = 0;//0表示腐蚀erode,1表示膨胀dilate
    int g_nKernelSize = 3;//核大小
    
    
    
                          //全局函数声明********************************
    void on_TrackbarNumberChange(int, void *);//回调函数
    void on_KernelSizeChange(int, void *);//回调函数
    void Process();
    
    int main()
    {
        //载入原始图片
        g_srcImage = imread("E:\VS2015Opencv\vs2015\project\picture\cat.jpg");
        if (!g_srcImage.data) { printf("读取srcImage错误~! 
    "); return false; }
        //显示原始图片
        namedWindow("image[origin]");
        imshow("image[origin]", g_srcImage);
        //腐蚀/膨胀操作
        namedWindow("image[morphology]");
        createTrackbar("erode/dilate: ", "image[morphology]", &g_nTrackbarNumber, 1, on_TrackbarNumberChange);
        createTrackbar("kernel size: ", "image[morphology]", &g_nKernelSize, 21, on_KernelSizeChange);
        on_TrackbarNumberChange(g_nTrackbarNumber, 0);
        on_KernelSizeChange(g_nKernelSize, 0);
        waitKey();
        return 0;
    }
    
    void Process()
    {
        Mat element = getStructuringElement(MORPH_RECT, Size(g_nKernelSize * 2 + 1, g_nKernelSize * 2 + 1), Point(g_nKernelSize, g_nKernelSize));
        if (g_nTrackbarNumber == 0)
            erode(g_srcImage, g_dstImage, element);
        else
            dilate(g_srcImage, g_dstImage, element);
        imshow("image[morphology]", g_dstImage);
    }
    //回调函数
    void on_TrackbarNumberChange(int, void *)
    {
        Process();
    }
    
    void on_KernelSizeChange(int, void *)
    {
        Process();
    }

    腐蚀和膨胀是针对白色部分(高亮部分而言)。从数学角度来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,称之为A)与核(称之为B)进行卷积。
    膨胀就是求局部最大值操作,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素,这样就会使图像中的高亮区域逐渐增长。
    腐蚀就是求局部最小值操作,即计算核B覆盖的区域的像素点的最小值,并把这个最小值赋值给参考点指定的像素,这样就会使图像中的高亮区域逐渐减少。
    可参考博文:https://blog.csdn.net/qq_36387683/article/details/80479793

  • 相关阅读:
    MATLAB 显示精度 用法设置以及实例
    matlab MCR路径
    fmincon如何使非线性约束函数写成匿名函数的形式
    Matlab强行终止程序执行
    Matlab绘制图像后在指定点绘制坐标线以及标注变量
    c#各种变量的总结
    Matlab绘制图像及图像的处理
    MATLAB 嵌套函数,子函数,私有函数,重载函数
    Matlab 接受字符串并转为符号表达式,inline函数,匿名函数形式的方法汇总
    MATLAB 函数编写方法, 浅析MATLAB中的内联函数、匿名函数和函数函数
  • 原文地址:https://www.cnblogs.com/fcfc940503/p/11279031.html
Copyright © 2020-2023  润新知