开操作与闭操作

开操作

  闭操作同样使轮廓线更为光滑,但与开操作相反的是,它通常连接狭窄的间断和长细的鸿沟,消除小的孔洞,并填补轮廓线中的断裂。

  使用结构元素 B 对集合 A 进行开操作,定义为:

               

 闭操作

  闭操作同样使轮廓线更为光滑,但与开操作相反的是,它通常连接狭窄的间断和长细的鸿沟,消除小的孔洞,并填补轮廓线中的断裂。

             

 

 

开操作有一个简单的几何解释

对形态学上的开操作和闭操作的简单说明

import cv2 as cv

def open_image(image):
    '图像开操作'
    gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    # res=cv.bitwise_not(gray)
    #图像二值化
    ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    cv.imshow('binary',binary)
    #获取形态学结构kernel,采用的形态学方式MORPH_RECT
    kernel=cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    #图像的开操作
    binary=cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
    cv.imshow('open',binary)

def close_image(image):
    '图像闭操作'
    gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    # res=cv.bitwise_not(gray)
    ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    kernel=cv.getStructuringElement(cv.MORPH_RECT,(5,5))
    #操作函数morphologyEx
    binary=cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
    cv.imshow('close',binary)

src = cv.imread("tree.jpg")
cv.imshow("原来", src)
open_image(src)
close_image(src)
cv.waitKey(0)
cv.destroyAllWindows()

 

 

   闭运算用来连接被误分为许多小块的对象,而开运算用于移除图像噪音形成的斑点.因此,某些情况下可以连续运用这两种运算。如对一副二值图连续使用闭运算和开运算,将获得图像中的主要对象。同样,如果想消除图像中的噪声(即图像中的“小点”),也可以对图像先用开运算后用闭运算,不过这样也会消除一些破碎的对象。

 

posted @ 2021-01-14 13:28  为红颜  阅读(1916)  评论(0编辑  收藏  举报