zoukankan      html  css  js  c++  java
  • 形态学应用——图像开运算与闭运算

    如果不了解腐蚀与膨胀原理的同学那请看我前一期博客哦!)

    • 1.开运算
      开运算 = 先腐蚀运算,再膨胀运算(看上去把细微连在一起的两块目标分开了)
      开运算的效果图如下图所示:
      这里写图片描述
    • 开运算总结:
      (1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。
      (2)开运算是一个基于几何运算的滤波器。
      (3)结构元素大小的不同将导致滤波效果的不同。
      (4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。

    • 2.闭运算
      闭运算 = 先膨胀运算,再腐蚀运算(看上去将两个细微连接的图块封闭在一起)
      闭运算的效果图如下图所示:

    这里写图片描述
    - 闭运算总结:
    (1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。
    (2)闭运算是通过填充图像的凹角来滤波图像的。
    (3)结构元素大小的不同将导致滤波效果的不同。
    (4)不同结构元素的选择导致了不同的分割。


    我们可以使用opencv自带函数进行调试哦!
    openCV里有一个很好的函数getStructuringElement,我们只要往这个函数传相应的处理参数,就可以进行相应的操作了,使用起来非常方便。下面我简单列举一下相应的操作宏定义:

    标识符含义
    MORPH_OPEN 开运算
    MORPH_CLOSE 闭运算
    MORPH_ERODE 腐蚀
    MORPH_DILATE 膨胀

    我就简单举个例子:

    #include<opencv2opencv.hpp>   
    #include<opencv2highguihighgui.hpp>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
        Mat img = imread("寒山不冷.jpg");
        namedWindow("原始图", WINDOW_NORMAL);
        imshow("原始图", img);
        Mat out;
        //获取自定义核 第一个参数MORPH_RECT表示矩形的卷积核,当然还可以选择椭圆形的、交叉型的
        Mat element = getStructuringElement(MORPH_RECT, Size(18, 18)); 
    
    
        //具体要选择哪种操作,就修改第三个参数就可以了。这里演示的是形态学开运算处理
        morphologyEx(img, out, MORPH_OPEN, element);
        namedWindow("形态学处理操作", WINDOW_NORMAL);
        imshow("形态学处理操作", out);
        waitKey(0);
    
    }
    
     
  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/Ph-one/p/14120607.html
Copyright © 2011-2022 走看看