OpenCV零基础入门(5):OpenCV形态学处理

  • OpenCV形态学相关的运算包含腐蚀(MORPH_ERODE),膨胀(MORPH_DILATE),开运算(MORPH_OPEN),闭运算(MORPH_CLOSE),梯度运算(MORPH_GRADIENT),礼帽运算(MORPH_TOPHAT),黑帽运算(MORPH_BLACKHAT)

1.腐蚀操作

在OpenCV中,腐蚀操作通过使用一个结构元素(通常是一个小的矩形、圆形或其他形状的矩阵)来“侵蚀”图像中的前景对象,使得前景区域变小,从而去除小的噪声或细节,或者填补图像中的小孔洞。

  • 函数原型:dst =cv2.erode(src,kernel,iterations)
  • dst:腐蚀操作结束后的输出图像。
  • src :输入的二值图像,通常为单通道灰度图像。
  • kerne1 :腐蚀操作的结构元素,用于定义腐蚀的邻域大小和形状。
  • iterations :腐蚀操作的迭代次数,表示应用腐蚀的重复次数。
    通过调整结构元素的形状和大小以及选代次数,可以控制腐蚀的效果,从而达到去除噪声,缩小目标物体等目的。
import cv2
import numpy as np
img=cv2.imread('./img/hello.png')
kernel=np.ones((5,5),np.uint8) #定义核为5*5的网格
erosion=cv2.erode(img,kernel,iterations=1)
cv2.imshow('img',img)
cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

腐蚀

2.膨胀操作

膨胀操作是形态学操作中的一种基本操作,主要用于增加或加强图像中的前景区域。膨胀操作通过使用一个结构元素(也称为卷积核)在图像上滑动,将结构元素覆盖区域的最大像素值提取并替换锚点位置的像素值,从而实现图像边界的扩张。

  • 函数原型:dst =cv2.dilate(src,kernel,iterations)
import cv2
import numpy as np
img=cv2.imread('./img/hello.png')
kernel=np.ones((5,5),np.uint8) #定义核为5*5的网格
erosion=cv2.erode(img,kernel,iterations=3) #腐蚀操作
dilate=cv2.dilate(erosion,kernel,iterations=3) #膨胀操作
cv2.imshow('img',img)
cv2.imshow('erosion',erosion)
cv2.imshow('dilate',dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

膨胀
先通过腐蚀操作缩小图像中的物体,去除小噪声点,再通过膨胀操作以填补腐蚀留下的空洞,将前景恢复到腐蚀之前的水平。

3.开运算与闭运算

  • 开运算:先腐蚀,再膨胀。
  • 闭运算:先膨胀,再腐蚀。
import cv2
import numpy as np
img=cv2.imread('./img/hello.png')
kernel=np.ones((5,5),np.uint8) 

opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) #开运算
closing=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel) #闭运算

cv2.imshow('opening',opening)
cv2.imshow('closing',closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

开运算与闭运算

4.梯度运算

分别对图像进行膨胀和腐蚀操作。梯度运算是膨胀操作过后的图像减去腐蚀操作过后的图像,用于分离图像的边缘。

import cv2
import numpy as np
img=cv2.imread('./img/hello.png')
kernel=np.ones((5,5),np.uint8) 

gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel) #梯度运算

cv2.imshow('gradient',gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()

梯度运算

5.礼帽与黑帽

  • 礼帽=原始输入减去开运算结果
  • 黑帽=闭运算结果减去原始输入
import cv2
import numpy as np
img=cv2.imread('./img/hello.png')
kernel=np.ones((5,5),np.uint8) 

tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) #礼帽
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) #黑帽

cv2.imshow('tophat',tophat)
cv2.imshow('blackhat',blackhat)

cv2.waitKey(0)
cv2.destroyAllWindows()

礼帽与黑帽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值