• 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函数得到

  • 相关阅读:
    【LeetCode-动态规划】编辑代价
    【C++】使用istringstream分割字符串
    【LeetCode-字符串】简化路径
    【LeetCode-字符串】简化路径
    【LeetCode-并查集】朋友圈
    【LeetCode-背包】目标和
    【LeetCode-动态规划】分割等和子集
    The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes
    【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止
    MySQL解压版安装配置详解
  • 原文地址:https://www.cnblogs.com/qianxia/p/11106090.html
Copyright © 2020-2023  润新知