• Opencv学习笔记(十二):图片腐蚀和膨胀操作


    参考

    1. OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍

    腐蚀

    原理:是在原图的小区域内取局部最小值。因为是二值化图,只有 0 和 255,所以小区域内有一个是 0 该像素点就为 0:

    作用:图像中的物体变小

    代码

    erode(src, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)#腐蚀函数
    
    
    • 1
    • 2
    import cv2
    import numpy as np
    
    # 腐蚀
    image = cv2.imread('2.png')
    kernel1 = np.ones((3,3),np.uint8)  # 腐蚀单元
    kernel2 = np.ones((5,5),np.uint8)
    kernel3 = np.ones((7,7),np.uint8)
    
    erosion1 = cv2.erode(image, kernel1)  # 腐蚀函数
    erosion2 = cv2.erode(image, kernel2)
    erosion3 = cv2.erode(image, kernel3)
    
    cv2.imshow("original", image)
    cv2.imshow("erosion1", erosion1)
    cv2.imshow("erosion2", erosion2)
    cv2.imshow("erosion3", erosion3)
    
    cv2.waitKey(0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    效果

    在这里插入图片描述

    膨胀

    原理:膨胀与腐蚀相反,取的是局部最大值。
    作用:先腐蚀后膨胀,连接两个分开的物体,图像中的物体变大。

    代码

    import cv2
    import numpy as np
    
    # 腐蚀
    image = cv2.imread('3.jpg')
    kernel1 = np.ones((3, 3), np.uint8)     # 3个不同尺度的膨胀单元
    kernel2 = np.ones((5, 5), np.uint8)
    kernel3 = np.ones((9, 9), np.uint8)
    
    dilation1 = cv2.dilate(image, kernel1)    # 膨胀函数
    dilation2 = cv2.dilate(image, kernel2)
    dilation3 = cv2.dilate(image, kernel3)
    
    
    cv2.imshow("original", image)
    cv2.imshow("dilation1", dilation1)
    cv2.imshow("dilation2", dilation2)
    cv2.imshow("dilation3", dilation3)
    
    cv2.waitKey(0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    效果

    在这里插入图片描述

    开运算/闭运算

    开运算就是先腐蚀后膨胀,可以直接通过opencv的morphologyEx进行处理,cv2.MORPH_OPEN指定开运算

    代码

    开运算

    import cv2
    image = cv2.imread('2.png')
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
    opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
    cv2.imshow('original', image)
    cv2.imshow('deal', opening)
    cv2.waitKey(0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    闭运算
    闭运算就是先膨胀后腐蚀,可以直接调用morphologyEx,cv2.MORPH_CLOSE指定闭运算

    import cv2
    import numpy as np
    image = cv2.imread('2.png')
    close_img = cv2.morphologyEx(image,cv2.MORPH_CLOSE,kernel=np.ones((7,7),np.uint8))
    cv2.imshow('original', image)
    cv2.imshow('deal', close_img)
    cv2.waitKey(0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    np.concatenate、numpy.append
    Nginx重定向
    【python编程从入门到实践】P1 搭建python编程环境
    毕业设计 机器学习数学原理
    Qt QWebSocket网络编程
    C# 巧妙计算小R输漏掉的一位同学
    程序员们有什么好的编程习惯?
    javaSE--数据类型(复习)
    使用hutool工具发送带附件的邮件(特简单)
    Qt: windows下关闭系统窗体
  • 原文地址:https://blog.csdn.net/m0_51004308/article/details/125509442