zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    「两千年中公历转换」数据库介绍
    [转]Web中使用Word控件。(DSOFramer )
    解决DRIVE_IRQL_NOT_LESS_OR_EQUAL的方法
    Html Img的几个属性_存在个问题
    不错的开源C#博客_BlogEngine.net
    [转]引用指定的namespace 解决命名空间冲突的错误
    [原]不太完善的图像合并程序VS2005CSharp_有目录监控_TIF_JPG输出
    [转]JS小游戏_9格的棋
    JS小游戏_能坚持几秒
    [转]前台JS限制上传图片质量大小和尺寸!
  • 原文地址:https://www.cnblogs.com/fcfc940503/p/11279031.html
Copyright © 2011-2022 走看看