• 3.2.OpenCV技能树--二值图像处理--图像腐蚀与膨胀


    1.文章内容来源

    1.题目来源:https://edu.csdn.net/skill/practice/opencv-43cb627865154bb69eaad017845e8944/8295?language=opencv&materialId=20783
    2.资料来源:https://edu.csdn.net/skill/opencv/opencv-43cb627865154bb69eaad017845e8944?category=658
    
    • 1
    • 2

    2.图像膨胀处理

    2.1.图像膨胀原理简介

    图像膨胀原理:
    膨胀过程是有一个结构元素或者模板去在原图像素比对.
    当比对过程中,中心像素位置的值根据其八邻域(看取得kernel卷积核的大小)取或运算。
    或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,
    如下图。由于将周围的最大值去代替中心值,所膨胀的就是白色(高亮部分)
    
    膨胀函数解析:
    膨胀函数cv2.dilate(img,kernel,iterations)
    1.img:原图像
    2.kernel:指膨胀操作的内核,默认3x3的卷积核,也可以自己选择修改。
    3.iterations:迭代次数,默认为1.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2.图像膨胀核心代码

    import cv2
    import matplotlib.pyplot as plt
    # 支持中文
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    def dilate_example(image):
        #图像灰度化处理
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        #图像阈值化处理
        ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
        #设定卷积核函数
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        dst = cv2.dilate(binary, kernel)#图像膨胀处理
        
        figure=[image,gray,binary, dst]
        title=[u'原始图像',u'灰度图像',u'阈值化处理图像',u'膨胀化图像']
        for i in range(4):
            plt.subplot(1,4,i+1)
            plt.imshow(figure[i],'gray')
            plt.title(title[i])
            plt.xticks([])
            plt.yticks([])
        plt.show()
    
    if __name__=='__main__':
        img = cv2.imread(r"D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png")
        dilate_example(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2.3.图像膨胀效果展示

                    在这里插入图片描述

    3.图像腐蚀处理

    3.1.图像腐蚀原理简介

    图像腐蚀原理:
    腐蚀过程是有一个结构元素或者模板去在原图像素比对.
    当比对过程中,中心像素位置的值根据其八邻域(看取得kernel卷积核的大小)取或运算。
    或运算为1就取自己的中心值,否则将周围的最大值去代替中心值,
    如下图。由于将周围的最大值去代替中心值,所腐蚀的就是白色(高亮部分),高亮部分会变黑.
    
    腐蚀函数解析:
    腐蚀函数:cv2.erode(img,kernel,iterations)
    1.img:原图像
    2.kernel:指腐蚀操作的内核,默认3x3的卷积核,也可以自己选择修改。
    3.iterations:迭代次数,默认为1.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.2.图像腐蚀核心代码

    import cv2
    import matplotlib.pyplot as plt
    # 支持中文
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    def dilate_example(image):
        #图像灰度化处理
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        #图像阈值化处理
        ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
        #设定卷积核函数
        kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        dst = cv2.erode(binary, kernel)#图像腐蚀处理
        
        figure=[image,gray,binary, dst]
        title=[u'原始图像',u'灰度图像',u'阈值化处理图像',u'腐蚀化图像']
        for i in range(4):
            plt.subplot(1,4,i+1)
            plt.imshow(figure[i],'gray')
            plt.title(title[i])
            plt.xticks([])
            plt.yticks([])
        plt.show()
    
    if __name__=='__main__':
        img = cv2.imread(r"D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png")
        dilate_example(img)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3.3.图像腐蚀效果展示

                    在这里插入图片描述

    4.易错点总结与反思

    易错点反思与总结:
    1.膨胀函数:cv2.dilate(img,kernel,iterations),每一个参数就算是默认也要写出来!!
    2.腐蚀函数:cv2.erode(img,kernel,iterations),每一个参数就算是默认也要写出来!!
    3.腐蚀和膨胀是对白色部分而言的,原先黑色部分的处理没有影响。
    4.kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (x, x))可以根据自己意愿设定卷积核。
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    TopoLVM: 基于LVM的Kubernetes本地持久化方案,容量感知,动态创建PV,轻松使用本地磁盘
    2022年HNUCM信息科学与工程学院第五届新生赛——正式赛
    网络安全(黑客)自学
    好好学习第一天:手写数字识别
    60%专科生月薪低于5K?测试员:这锅我们不背....
    laravel框架介绍(二) composer命令下载laravel报错
    tiup cluster template
    gorm的mysql保存数据保存主键冲突Duplicate entry for key PRIMARY
    English语法_关系代词 - 注意事项
    无涯教程-JavaScript - COSH函数
  • 原文地址:https://blog.csdn.net/m0_71819746/article/details/133655248