OpenCv之图像形态学(笔记08)

本文介绍了图像处理中的形态学操作,包括腐蚀、膨胀、开运算、闭运算、梯度、顶帽和黑帽。通过使用不同形状的结构元素,并结合多次迭代,展示了这些操作如何影响图像中黑白区域,从而消除噪点、连接断开的区域或分离紧密的物体。
摘要由CSDN通过智能技术生成
腐蚀:其原理是在原图的小区域内取局部最小值。这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的,结构元素可以是矩形、椭圆、十字架,可以用cv2.getStructuringElement()来生成不同形状的结构元素
import numpy as np
import matplotlib.pyplot as plt
import cv2
#图像形态学
def show(image):
    plt.imshow(image)
    plt.axis('off')
    plt.show()

def imread(image):
    image=cv2.imread(image)
    #把图像的BGR转换成RGB
    image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    return image

image=imread('im.jpg')
#矩形结构
kernel1=cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
#椭圆结构
kernel2=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
#十字架结构
kernel3=cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))

# erosion=cv2.erode(image,kernel1)
# show(image)
#可以进行多次腐蚀
for i in range(3):
    erosion = cv2.erode(image, kernel1,iterations=i+1)
    show(erosion)

腐蚀几次之后的效果: 腐蚀之后黑色越来越多

 

 

#Dilation膨胀
#膨胀与腐蚀相反,取的是局部最大值。cv2.dilate()
import numpy as np
import matplotlib.pyplot as plt
import cv2
#图像形态学
def show(image):
    plt.imshow(image)
    plt.axis('off')
    plt.show()

def imread(image):
    image=cv2.imread(image)
    #把图像的BGR转换成RGB
    image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
    return image


#Dilation膨胀
#膨胀与腐蚀相反,取的是局部最大值。cv2.dilate()
for i in range(3):
    dilation = cv2.dilate(image, kernel1,iterations=i+1)
    show(dilation)

 效果展示:膨胀之后白色越来越多

#开运算
#先腐蚀后膨胀胶开运算,其作用是消除小白点。这类形态学操作作用cv2.morphologyEx()函数实现


openging=cv2.morphologyEx(image,cv2.MORPH_OPEN,kernel1)
show(openging)

效果展示:

#闭运算
#闭运算则相反,先膨胀后腐蚀。其作用是消除小黑点。

closeing=cv2.morphologyEx(image,cv2.MORPH_CLOSE,kernel1)
show(closeing)

先开运算,再进行闭运算(消除白点和黑点)


openging=cv2.morphologyEx(image,cv2.MORPH_OPEN,kernel1)
show(openging)

closeing=cv2.morphologyEx(openging,cv2.MORPH_CLOSE,kernel1)
show(closeing)

效果展示:

#Gradient形态学梯度
#膨胀图减去腐蚀图,dilation-erosion,得到物体的轮廓
gradient=cv2.morphologyEx(image,cv2.MORPH_GRADIENT,kernel1)
show(gradient)

#TopHat顶帽/White Hat白帽(把开运算去除掉的白点显示出来)
#原图减去开运算后的图:src-opening
tophat=cv2.morphologyEx(image,cv2.MORPH_TOPHAT,kernel1)
show(tophat)

 

#balckHat黑帽
#闭运算后的图减去原图:closing-src
blackhat=cv2.morphologyEx(image,cv2.MORPH_BLACKHAT,kernel1)
show(blackhat)

 

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值