精华内容
下载资源
问答
  • OpenCV-Python图像运算变换处理:开运算闭运算以及不同核矩阵的影响分析.rar
  • 本文简单介绍了形态变换中的开运算闭运算开运算闭运算是形态学中最为重要的两个组合运算,这两个运算是不同形状不同大小的核对图像变换的影响比较大,开运算有助于断开一些图像间的细小连接或背景上的一些图像...

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython

    一、引言

    在《OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍 https://blog.csdn.net/LaoYuanPython/article/details/109441709》等系列博文中老猿详细介绍了腐蚀和膨胀的原理、算法、Python的模拟实现以及OpenCV函数的详细语法及应用,具体应用时,如果核矩阵的有效元素范围大于图像黑色孔洞,则膨胀可以填充图像中的孔洞及图像边缘的小凹陷部分,而腐蚀可以消除图像边缘类似毛刺的小的亮色部分,并缩小前景图像。

    腐蚀和膨胀是形态学运算的基本运算,二者在图像处理功用上有一定相反的效果,但是二者并不是逆运算,二者可以级联结合使用。通过腐蚀和膨胀的复合和集合运算组合,就构成了形态学运算簇。

    使用同一个结构元素,先对图像进行腐蚀运算,再对图像进行膨胀运算,二者的组合成为开运算;反过来先对图像进行膨胀运算,再对图像进行腐蚀运算,称为闭运算。开运算和闭运算是形态学中最为重要的两个组合运算。

    在《OpenCV-Python图像形态变换概述及morphologyEx函数介绍 https://blog.csdn.net/LaoYuanPython/article/details/109556425》介绍了OpenCV-Python形态学变换的函数morphologyEx,在本节不重复介绍开运算和闭运算的具体函数调用,仅直接使用。

    二、开、闭运算简介

    2.1、功能和作用

    开运算就是先腐蚀后膨胀的过程,用来消除背景中的小点前景色噪声、平滑形状边界、断开物体之间的细小连接,当然不同的核矩阵效果会不同,有效元素为圆的核矩阵可以平滑边界、去除突刺。

    闭运算有助于关闭前景物体上的小孔,或者小黑点。闭运算用来填充物体内的小空洞,连接邻近的物体,连接断开的轮廓线,平滑其边界的同时不改变面积。闭运算是先膨胀后腐蚀的过程。合理选择卷积核大小,太小了无法去除前景图的黑点。

    2.2、特性

    开运算特性
    • 开运算能够除去孤立的小点,毛刺和两个景物之间的细连接线,而总的位置和形状不变
    • 开运算是一个基于几何运算的滤波器。 结构元素大小的不同将导致滤波效果的不同
    • 不同的结构元素的选择导致了不同的分割,即提取出不同的特征。
    闭运算特性
    • 闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变
    • 闭运算是通过填充图像的凹角来滤波图像的
    • 结构元素大小的不同将导致滤波效果的不同
    • 不同结构元素的选择导致了不同的分割

    三、案例

    3.1、案例背景

    • 为了观察开运算和闭运算对图像变换的影响,老猿自己构造了一张包含多个小图片的复合图片《黑白多态图.png》,可以用于对比观察变换后图像的变化,图像内容如下:
      在这里插入图片描述

    • 由于OpenCV的图像展示一张图像一个窗口,且无法展现超出屏幕范围大小的图像,老猿自己实现了三个函数来实现多图同屏自动排列展示

    1. previewImg(img):调用操作系统缺省图像阅读器展示图像
    2. preparePreviewImg(imgTitle=None,img=None,firstImg=False):将要多图合并展现的图片加到展现列表,如果img为None,则图像换行展现,否则图像根据大小自动排列
    3. previewImgList():将展现列表中的图片合并进行展现,展现的图像下面增加图像说明的文字,展现后清空展现列表

    相关函数详细内容请见《OpenCV-Python中预览超大图的程序实现方法:https://blog.csdn.net/LaoYuanPython/article/details/110195287》。

    • 为了研究不同核对图像变换的影响,会使用不同形状不同大小的的核进行变换对比

    3.2、不同大小核案例

    下面使用不同的大小的核进行开闭运算。

    代码:
    def morphologyExTest(imgObj,imgTitle=''):
        if isinstance(imgObj, str):
            img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)
            if img is None:
                img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)
            imgTitle = imgTitle+imgObj+': '
        else:
            imgTitle = imgTitle + ': '
        kernal = cv2.getStructuringElement(cv2.MORPH_RECT ,(3,3))
      
        imgOpen = preparePreviewImg(imgTitle+'开运算,矩形核大小3*3',cv2.morphologyEx(img, cv2.MORPH_OPEN,kernal))
        imgClose = preparePreviewImg(imgTitle+'闭运算,矩形核大小3*3',cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))
        kernal = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
        imgOpen = preparePreviewImg(imgTitle + '开运算,矩形核大小5*5', cv2.morphologyEx(img, cv2.MORPH_OPEN, kernal))
        imgClose = preparePreviewImg(imgTitle + '闭运算,矩形核大小5*5', cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))
        preparePreviewImg()
    
    变换后图像:

    在这里插入图片描述
    从上面图像对比可以看到: 核越大,开运算被侵蚀的前景色越多,闭运算则背景色被填充越多。

    3.3、不同形状核案例

    下面分别使用横线和竖线的核进行开闭运算。

    代码:
    def morphologyExTest(imgObj,imgTitle=''):
        if isinstance(imgObj, str):
            img = cv2.imread(imgObj)#, cv2.IMREAD_GRAYSCALE)
            if img is None:
                img = cv2.imdecode(np.fromfile(imgObj, dtype=np.uint8), -1)
            imgTitle = imgTitle+imgObj+': '
        else:
            imgTitle = imgTitle + ': '
        kernal = np.ones((1,5),np.uint8)
        imgOpen = preparePreviewImg(imgTitle+'开运算,横线核大小5*5',cv2.morphologyEx(img, cv2.MORPH_OPEN,kernal))
        imgClose = preparePreviewImg(imgTitle+'闭运算,横线核大小5*5',cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))
        kernal = np.ones((5,1),np.uint8)
        imgOpen = preparePreviewImg(imgTitle + '开运算,竖线核大小5*5', cv2.morphologyEx(img, cv2.MORPH_OPEN, kernal))
        imgClose = preparePreviewImg(imgTitle + '闭运算,竖线核大小5*5', cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernal))
        preparePreviewImg()
    
    变换后图像:

    腐蚀膨胀
    从上图可以看到,横线的核和竖线的核对开闭的影响非常明显,其实就是对腐蚀和膨胀的影响。

    四、小结

    本文简单介绍了形态变换中的开运算和闭运算,开运算和闭运算是形态学中最为重要的两个组合运算,这两个运算是不同形状不同大小的核对图像变换的影响比较大,开运算有助于断开一些图像间的细小连接或背景上的一些图像噪点、去除图像边缘的凸起,闭运算可以用于填充图像上的细小孔洞、填充图像轮廓上的凹陷。具体应用时需要根据处理图像的特征和需要达到的目标来设置核矩阵的形状和大小。

    五、形态变换博文传送门

    下面是老猿博文中与形态变换相关的博文列表:

    1. https://blog.csdn.net/LaoYuanPython/article/details/109441709 OpenCV-Python图像处理:腐蚀和膨胀原理及erode、dilate函数介绍
    2. https://blog.csdn.net/LaoYuanPython/article/details/109984045 OpenCV-Python图像运算变换处理:开运算和闭运算以及不同核矩阵的影响分析
    3. https://blog.csdn.net/LaoYuanPython/article/details/109556425 OpenCV-Python图像形态变换概述及morphologyEx函数介绍
    4. https://blog.csdn.net/LaoYuanPython/article/details/109768675 OpenCV-Python图像运算变换处理:形态学梯度运算及分类
    5. https://blog.csdn.net/LaoYuanPython/article/details/110195287 OpenCV-Python中预览超大图的程序实现方法
    6. https://blog.csdn.net/LaoYuanPython/article/details/110223709 OpenCV-Python图形图像处理:利用TopHat顶帽获取背景色中的噪点
    7. https://blog.csdn.net/LaoYuanPython/article/details/110294445 OpenCV-Python图形图像处理:利用黑帽去除图像浅色水印
    8. https://blog.csdn.net/LaoYuanPython/article/details/110676764 OpenCV-Python击中击不中HITMISS形态变换详解

    更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理 》
    专栏网址https://blog.csdn.net/laoyuanpython/category_9979286.html

    关于老猿的付费专栏

    老猿的付费专栏《使用PyQt开发图形界面Python应用 》(https://blog.csdn.net/laoyuanpython/category_9607725.html)专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》 (https://blog.csdn.net/laoyuanpython/category_10232926.html)详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。

    付费专栏文章目录:《moviepy音视频开发专栏文章目录》(https://blog.csdn.net/LaoYuanPython/article/details/107574583)、《使用PyQt开发图形界面Python应用专栏目录 》(https://blog.csdn.net/LaoYuanPython/article/details/107580932)。

    对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》(https://blog.csdn.net/laoyuanpython/category_9831699.html)从零开始学习Python。

    如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

    跟老猿学Python、学OpenCV!

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython

    展开全文
  • #开运算闭运算: # :先腐蚀后膨胀 img = cv2.imread('D:/opencv/tx/dige.png') kernel = np.ones((3,3),np.uint8) opening =cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) cv2.imshow('opening',...

    梯度运算

    import cv2
    import numpy as np
    pie=cv2.imread('d:/opencv/tx/pie.png')
    kernel = np.ones((7,7),np.uint8)
    #膨胀
    dilate = cv2.dilate(pie,kernel ,iterations= 5)
    #腐蚀
    erosion = cv2.erode(pie,kernel ,iterations= 5)
    res =np.hstack((dilate ,erosion ))
    cv2.imshow('res',res)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #膨胀-腐蚀=梯度运算
    gradient = cv2.morphologyEx(pie,cv2.MORPH_GRADIENT ,kernel)
    cv2.imshow('gradient ',gradient )
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    礼帽与黑帽
    礼帽=原始输入-开运算结果
    黑帽=闭运算-原始输入

    #礼帽
    img=cv2.imread('D:/opencv/tx/dige.png')
    kernel = np.ones((3,3),np.uint8)
    tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT ,kernel)
    cv2.imshow('tophat ',tophat )
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #黑帽
    img=cv2.imread('D:/opencv/tx/dige.png')
    kernel = np.ones((3,3),np.uint8)
    blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT ,kernel)
    cv2.imshow('blackhat ',blackhat )
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    import cv2
    import numpy as np
    #开运算与闭运算:
    # 开:先腐蚀后膨胀
    img = cv2.imread('D:/opencv/tx/dige.png')
    kernel = np.ones((3,3),np.uint8)
    opening =cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
    cv2.imshow('opening',opening)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    #闭:先膨胀再腐蚀
    img = cv2.imread('D:/opencv/tx/dige.png')
    kernel = np.ones((3,3),np.uint8)
    closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE , kernel )
    cv2.imshow('closing',closing)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    
    展开全文
  • Python-openCV开运算实例

    2020-09-16 13:50:14
    主要介绍了Python-openCV开运算实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • python+opencv-11 开运算闭运算

    千次阅读 2020-08-29 20:39:22
    python+opencv-11 开运算开运算与运算代码展示 开运算与运算 开运算与运算都是在腐蚀和膨胀的基础上进行的。 开运算是指先腐蚀后膨胀的操作,定义为: I⋅S=(I−S)+SI\cdot S=(I-S)+SI⋅S=(I−S)+S 其中III为...

    python+opencv-11 开运算

    开运算与闭运算

    开运算与闭运算都是在腐蚀和膨胀的基础上进行的。
    开运算是指先腐蚀后膨胀的操作,定义为:
    I ⋅ S = ( I − S ) + S I\cdot S=(I-S)+S IS=(IS)+S
    其中 I I I为输入图像, S S S为卷积核函数。
    开运算可以用来消除亮度较高的细小区域,在纤细处分离物体。
    闭运算是指先膨胀后腐蚀的操作,定义为:
    I ⋅ S = ( I + S ) − S I\cdot S=(I+S)-S IS=(I+S)S
    其中 I I I为输入图像, S S S为卷积核函数。
    闭运算可以用来填充白色物体内细小黑色的空洞区域,也可以用来连接临近物体。

    代码展示

    import cv2 as cv
    import numpy as np
    
    image = cv.imread("fu.jpg")
    cl = cv.imread("cl.jpg")
    k = np.ones((3, 3), np.uint8)
    open = cv.morphologyEx(image, cv.MORPH_OPEN, k)
    close = cv.morphologyEx(cl, cv.MORPH_CLOSE, k)
    
    cv.imshow("image", image)
    cv.imshow("image", cl)
    cv.imshow("opening", open)
    cv.imshow("closeing", close)
    
    cv.waitKey()
    cv.destroyAllWindows()
    

    在这里插入图片描述
    在这里插入图片描述
    闭运算结果:
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • python opencv 实现开闭运算

    千次阅读 2017-12-08 17:33:24
    涉及到的函数为erode 与dilate:import cv2 import matplotlib.pyplot as plt size = 11 kernel = np.ones((size, size), dtype=np.uint8) img_erosion = cv2.erode(img, kernel, iterations=1) ...

    涉及到的函数为erodedilate:

    import cv2
    import matplotlib.pyplot as plt
    size = 11
    kernel = np.ones((size, size), dtype=np.uint8)
    img_erosion = cv2.erode(img, kernel, iterations=1)
    img_dilation = cv2.dilate(img, kernel, iterations=1)
    img_close = cv2.erode(cv2.dilate(img4, kernel), kernel)
    plt.imshow(img_close)
    展开全文
  • 开运算(image)= 膨胀(腐蚀(image)) 图像被腐蚀后,去除了噪声,但是会压缩图像 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原有形状。 import cv2 import matplotlib.pyplot as plt import ...
  • 一、开运算 原理 先腐蚀处理,再膨胀处理 代码 # 开运算 # 方法:cv2.morphologyEx() # 参数1:原图,参数2:cv2.MORPH_OPEN,参数3:核的大小 kernel = np.ones((3, 3), np.uint8) opening = cv2.morphologyEx(img,...
  • 闭运算(image) = 腐蚀(膨胀(image)) 先膨胀,后腐蚀 它有助于关闭前景物体内部的小孔,或物体上的小黑点。 import cv2 import matplotlib.pyplot as plt import matplotlib import numpy as np # 设置画图支持...
  • OpenCV python 形态学–开运算 处理图片:[source.jpg] import cv2 import numpy as np def main(): # 1.读取图片 二值操作 img_src = cv2.imread("source.jpg") img_gray = cv2.cvtColor(img_src, cv2.COLOR_...
  • # @note : 形态学 开运算 + 圆形内核 处理 # -------------------------------- import cv2 as cv import numpy as np def opening_circle(img_bin, kernel_size=10): # 形态学 kernel = np.zeros((kernel_size...
  • opencv-python像素运算

    千次阅读 2019-08-22 16:29:01
    像素运算(两个图形必须完全一致):算数运算,逻辑运算 1·通过加减乘除,调节图像的亮度,对比度 2·通过与,或,非,实现遮罩层的控制 整体实现常见的图像混合,算数运算与几何运算 只有黑白二色的图像,...
  • morphologyEx(src, op, kernel) 简单说明: 第一个参数:输入图像 第二个参数:使用的形态学方法: MORPH_OPEN – 开运算 MORPH_CLOSE – 闭运算 第三个参数,kernel表示方框的大小 效果图: 同理闭运算,就不演示了...
  • OpenCV-Python图像运算变换处理:形态学梯度运算及分类.rar
  • 图像的腐蚀与膨胀是本次教程的核心——开运算闭运算的基础,如果结构元素为圆形, 则膨胀操作可填充图像中比结构元素小的孔洞以及图像边缘处小的凹陷部分。 而腐蚀可以消除图像中的毛刺及细小连接成分, 并将图像...
  • OpenCV中的开闭运算

    2021-02-20 14:23:51
    OpenCV中的开闭运算 代码实现: import cv2 import numpy as np #开闭运算 #1.开运算:先腐蚀后膨胀 #一些很小的连通区域可能在腐蚀过后就没了,因此,可以去除孤立区域。较大的连通区域的边缘会被核给平滑。 #删除...
  • 本文介绍了图像形态学变换的梯度运算的概念、原理、类别,并举例介绍了几种梯度运算OpenCV-Python实现以及对应图像效果,可以看到通过图像的梯度运算可以获得图像的轮廓,核的形状对图像梯度运算的影响比较大,...
  • 本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python...[Python图像处理十 ]:Opencv图像形态学处理之开运算闭运算和梯度运算原理及方法一、开运算1、开运算原理2、开运算功能函数构造3、Op

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,561
精华内容 4,624
关键字:

opencvpython开运算闭运算

python 订阅