• 3.3.OpenCV技能树--二值图像处理--图像形态学操作


    1.图像形态学运算简介

    1.图像形态学运算简介:
     (1)图像形态学是指以形态为基础对图像进行分析的一种方法或技术。
     (2)图像形态学操作的核心思想是:从图像中提取用于表达或描绘图像形状的信息。
     (3)图像形态学操作的目的是:使计算机更够更好的对图像进行识别和理解。因为图像形态学处理后可以简化图像数据,
        同时保存了它们基本的形状特性,去除了不相干的结构。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    常见的图像形态学处理操作:
    在这里插入图片描述

    2.图像开运算处理

    2.1.图像开运算处理简介

    2.1.图像开运算处理简介:
    (1)开运算cv2.MORPH_OPEN:先腐蚀后膨胀--dilate(erode(img))
    (2)图像开运算是图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;
       接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像。
    
    • 1
    • 2
    • 3
    • 4

    2.2.图像开运算处理代码

    #%%
    #图像开运算
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
    kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
    opening_img1= cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel1) 
    kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子
    opening_img2= cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel2)
    
    plt.figure(figsize=(10,8))
    figure=[img,opening_img1,opening_img2]
    titile=[u'Orignal Figure',u'Opening Figure(k=9)',u'Opening Figure(k=15)']
    for i in range(3):
        plt.subplot(1,3,i+1)
        plt.imshow(figure[i])
        plt.title(titile[i])
        plt.xticks([]),plt.yticks([])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2.3.图像开运算处理效果

    在这里插入图片描述

    3.图像闭运算处理

    3.1.图像闭运算处理简介

    3.1.图像闭运算处理简介:
     (1)闭运算cv2.MORPH_CLOSE:先膨胀后腐蚀--erode(dilate(img))
     (2)图像闭运算是图像依次经过膨胀、腐蚀处理后的过程。图像先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,
        或物体上的小黑点。如下图所示:
    
    • 1
    • 2
    • 3
    • 4

    3.2.图像闭运算处理代码

    #%%
    #图像闭运算
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
    kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
    kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子
    
    #闭运算两种核子
    closing1_img = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel1)
    closing2_img= cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel2)
    
    #绘图
    plt.figure(figsize=(10,8))
    figure=[img,closing1_img,closing2_img]
    titile=[u'Orignal Figure',u'Clongsing Figure(k=9)',u'Clongsing Figure(k=15)']
    for i in range(3):
        plt.subplot(1,3,i+1)
        plt.imshow(figure[i])
        plt.title(titile[i])
        plt.xticks([]),plt.yticks([])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    3.3.图像闭运算处理效果

    在这里插入图片描述

    4.图像形态学梯度处理

    4.1.图像形态学梯度处理简介

    4.1.图像形态学梯度处理简介:1)形态学梯度cv2.MORPH_GRADIENT:膨胀图-腐蚀图--dilate(img)-erode(img)2)图像梯度运算是膨胀图像减去腐蚀图像的结果,得到图像的轮廓,其中二值图像1表示白色点,0表示黑色点。
    
    • 1
    • 2
    • 3

    4.2.图像形态学梯度处理代码

    #%%
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
    kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
    kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子
    
    #闭运算两种核子
    
    gradient1_img = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel1)
    gradient2_img= cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel2)
    
    #绘图
    plt.figure(figsize=(10,8))
    figure=[img,gradient1_img,gradient2_img]
    titile=[u'Orignal Figure',u'Gradient Figure(k=9)',u'Gradient Figure(k=15)']
    for i in range(3):
        plt.subplot(1,3,i+1)
        plt.imshow(figure[i])
        plt.title(titile[i])
        plt.xticks([]),plt.yticks([])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4.3.图像形态学梯度处理效果

    在这里插入图片描述

    5.图像顶帽处理

    5.1.图像顶帽处理简介

    5.1.图像顶帽处理简介:
    (1)顶帽运算是原图-开运算图,所以顶帽运算可以获得图像的噪声信息,或者得到比原始图的边缘更亮的边缘信息。
    (2)顶帽运算cv2.MORPH_TOPHAT:也叫礼帽运算,原始图像-开运算结果 -- img-open(img)
    
    • 1
    • 2
    • 3

    5.2.图像顶帽处理代码

    #%%
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
    kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
    kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子
    
    #闭运算两种核子
    tophat1_img = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel1)
    tophat2_img= cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel2)
    
    #绘图
    plt.figure(figsize=(10,8))
    figure=[img,tophat1_img,tophat2_img]
    titile=[u'Orignal Figure',u'Tophat Figure(k=9)',u'Tophat Figure(k=15)']
    for i in range(3):
        plt.subplot(1,3,i+1)
        plt.imshow(figure[i])
        plt.title(titile[i])
        plt.xticks([]),plt.yticks([])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    5.3.图像顶帽处理效果

    在这里插入图片描述

    6.图像黑帽处理

    6.1.图像黑帽处理简介

    6.1.图像黑帽处理简介
    (1)黑帽运算cv2.MORPH_BLACKHAT: 闭运算结果-原始图像 -- close(img)-img
    (2)黑帽运算是闭运算图像-原始算图,所以黑帽运算可以获得图像内部的噪音,或者得到比原始图的边缘更暗的边缘信息。
    
    • 1
    • 2
    • 3

    6.2.图像黑帽处理代码

    #%%
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img= cv2.imread(r'D:\HuaweiMoveData\Users\27182\Desktop\opencv\3.Binary image processing\lena.png')
    kernel1= np.ones((9, 9), np.uint8)#9x9的卷积核子
    kernel2= np.ones((15, 15), np.uint8)#15x15的卷积核子
    
    #闭运算两种核子
    Blackhat1_img = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel1)
    Blackhat2_img= cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel2)
    
    #绘图
    plt.figure(figsize=(10,8))
    figure=[img,Blackhat1_img,Blackhat2_img]
    titile=[u'Orignal Figure',u'Blackhat Figure(k=9)',u'Blackhat Figure(k=15)']
    for i in range(3):
        plt.subplot(1,3,i+1)
        plt.imshow(figure[i])
        plt.title(titile[i])
        plt.xticks([]),plt.yticks([])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    6.3.图像黑帽处理效果

    在这里插入图片描述

    7.参考文章与致谢

    本章内容的完成离不开大佬们的文章/博客的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
    1.形态学操作的特点:https://blog.csdn.net/yxdd1gbk/article/details/91566586
    2.Opencv形态学开闭运算:https://blog.csdn.net/qq_42856191/article/details/123670455
    3.形态学处理:https://blog.csdn.net/zaishuiyifangxym/article/details/89791458
    4.opencv学习笔记(八):图像形态学操作:https://zhuanlan.zhihu.com/p/511628175
    5.OPenCV技能树专栏:https://edu.csdn.net/skill/opencv/opencv-50c11401b1e8431c964f0771cfe7941b?category=658&typeId=20786
    如果大家这这篇blog中有什么不明白的可以去他们的专栏里面看看,内容非常全面,应该能够有比较好的解答。
    在文章的最后再次表达由衷的感谢!!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
  • 相关阅读:
    阿里测试8年经验,靠着这份理解,我才得以生存下来
    【业务功能篇112】maven 指定打包某个module子模块 打包命令参数
    redis存储原理与数据模型笔记
    深度学习系列2——Pytorch 图像分类(AlexNet)
    【云原生 | 从零开始学Kubernetes】三、Kubernetes集群管理工具kubectl
    微信小程序项目源码ssm校园二手交易小程序+后台管理系统|前后分离VUE含论文+PPT+源码
    es-head安装启动
    做短视频的赶紧用起来,超好用的配音神器~
    Netty(2)文件编程(前置了解知识)
    Markdown数学公式大全
  • 原文地址:https://blog.csdn.net/m0_71819746/article/details/133680177