zoukankan      html  css  js  c++  java
  • Python+OpenCV图像处理之开闭操作

    开操作:图像形态学的重要操纵之一,基于膨胀与腐蚀操作组合形成的;主要是应用在二值图像分析中,灰度图像亦可

    开操作 = 腐蚀+膨胀 ,输入图像 + 结构元素

    作用:用来消除小物体、平滑较大物体的边界的同时并不明显改变其面积,提取水平或竖直的线

    闭操作:图像形态学的重要操纵之一,基于膨胀与腐蚀操作组合形成的;主要是应用在二值图像分析中,灰度图像亦可

    闭操作 = 膨胀+腐蚀 ,输入图像 + 结构元素

    作用:用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积

    python实现

    import cv2
    
    
    def open_demo(image):
        print(image.shape)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
        cv2.imshow("binary", binary)
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
        cv2.imshow("open result", binary)
    
    
    def close_demo(image):
        print(image.shape)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
        cv2.imshow("binary", binary)
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)
        cv2.imshow("close result", binary)
    
    
    if __name__ == "__main__":
        img = cv2.imread("image/open.jpg")
        cv2.namedWindow("input image",cv2.WINDOW_AUTOSIZE)
        cv2.imshow("input image", img)
        open_demo(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()

    开操作结果,尽量保留其他结构元素不变,消除小物体

    当我们改变内核的大小,就能达到不同的效果,比如我们设置ksize=(15,1),就可以提取图像中的水平直线

     kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 1))
     binary = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)

    同理,我们让ksize=(1,15),就可以提取图像中的垂直直线。结果如下

    闭操作结果,填充封闭区域,其他保持不变

    当我们改变内核的形状,也能达到不同的效果,比如提取图像中的圆

     kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))
     binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel)

    结果如下

    src参数:输入图像

    op参数:操作类型

      MORTH_OPEN                函数做开运算

      MORTH_CLOSE              函数做闭运算

      MORTH_GRADIENT       函数做形态学梯度运算

      MORTH_TOPHAT            函数做顶帽运算

      MORTH_BLACKHAT       函数做黑帽运算

      MORTH_DILATE              函数做膨胀运算

      MORTH_ERODE             函数做腐蚀运算

    kernel参数 :内核类型,用getStructuringElement函数得到

  • 相关阅读:
    用纹理贴图模拟反射,NeHe23课球面映射相关
    VS2010: CommandLine Warning D9025
    【转】C RunTime Library 暨 深入理解编译选项的含义 01
    让Doxygen输出中文注释不乱码
    windows环境下memcache配置
    C#中英文字符长度截取
    apache 的工作原理
    pear包安装phpunit
    使用 libevent 和 libev 提高网络应用性能
    PHP发明人谈MVC和网站设计架构——貌似他不支持php用mvc
  • 原文地址:https://www.cnblogs.com/qianxia/p/11106090.html
Copyright © 2011-2022 走看看