Opencv图像处理系列 ——3.图像的形态学操作(一)

本文介绍了如何使用OpenCV库进行图像的形态学操作,主要包括图像的腐蚀和膨胀。腐蚀操作通过黑色侵蚀白色,可以消除图像中的毛刺,而膨胀操作则可以填补空隙,两者结合可用于去除图像噪声。文章提供了实例代码,展示了不同迭代次数对腐蚀和膨胀效果的影响。
摘要由CSDN通过智能技术生成


本节我们将介绍如实使用OpenCV进行图像的形态学操作,包括图像的腐蚀和膨胀,以及图像的开运算闭运算。

1.图像的腐蚀操作

OpenCV中的腐蚀操作的函数为:

erosion_img = cv2.erode(img_ori, kernel, iterations=1)

其中img_ori为原图像,kernel为腐蚀的滤波核,iterations为腐蚀迭代操作的次数,erosion_img为腐蚀后的图像。
图像的腐蚀是有方向性的,腐蚀的本质就是黑吃白,即数值较小的(较黑的)吃掉数值较大的(较白的),下面我们给出两个例子来体现腐蚀的这一特性,帮助理解。

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\..\Pictures\Saved Pictures\liuge2.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

#腐蚀操作,黑色侵蚀白色
kernel = np.ones((5, 5), np.uint8)
erosion1 = cv2.erode(img, kernel, iterations=1)
cv2.imshow('erosion1 ', erosion1 )
cv2.waitKey(0)
cv2.destroyAllWindows()

原图像的输出结果为:
在这里插入图片描述
对该图像进行一次腐蚀操作的结果为:
在这里插入图片描述
我们可以看到白色“刘哥”上面的毛刺有效的较少了一部分,我们可以加大迭代的次数把毛刺完全消除;下面展示下两次三次迭代的代码和效果:

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\...\Pictures\Saved Pictures\liuge2.jpg')
cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

#腐蚀操作
kernel = np.ones((5, 5), np.uint8)
erosion1 = cv2.erode(img, kernel, iterations=1)
erosion2 = cv2.erode(img, kernel, iterations=2)
erosion3 = cv2.erode(img, kernel, iterations=3)
res = np.hstack((erosion1, erosion2, erosion3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

对应效果为:
在这里插入图片描述
可以发现我们通过增加迭代次数,使得黑色对白色的腐蚀加重去掉了毛刺。
下面我们在看一组腐蚀操作,只是换了一副输入的图像:

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\..\Pictures\Saved Pictures\liuge1.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

#腐蚀操作,黑色侵蚀白色
kernel = np.ones((5, 5), np.uint8)
erosion1 = cv2.erode(img, kernel, iterations=1)
cv2.imshow('erosion1 ', erosion1 )
cv2.waitKey(0)
cv2.destroyAllWindows()

此时我们的输入原图像为:
在这里插入图片描述
与之前的图像相比只是文字与背景的颜色发生的对换,此时我们我们对赐福图像腐蚀后的结果为:
在这里插入图片描述
腐蚀后发现毛刺并没有消失而是加重了,且刘哥整体也加粗加重了,此时腐蚀也是黑色区域对白色区域进行腐蚀,腐蚀是有方向性的,黑色侵蚀白色。
此时如果我们想处理掉图像对应的毛刺,就需要与腐蚀相对应的膨胀操作。

2.图像的膨胀操作

OpenCV中的腐蚀操作的函数为:
erosion_img = cv2.dilate(img_ori, kernel, iterations=1)

其中img_ori为原图像,kernel为对应的滤波核,iterations为膨胀迭代操作的次数,erosion_img为膨胀操作后的图像。
我们使用膨胀操作来处理白色背景的黑字“刘哥”:

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\..\Pictures\Saved Pictures\liuge.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

#腐蚀操作,黑色侵蚀白色
kernel = np.ones((5, 5), np.uint8)
dilate1= cv2.dilate(img, kernel, iterations=1)
cv2.imshow('dilate1', dilate1)
cv2.waitKey(0)
cv2.destroyAllWindows()

此时对图像膨胀后结果如下:
在这里插入图片描述
我们通过膨胀操作有效去除了图片中的毛刺,要想保留原图像中刘哥的字体大小粗细,我们可以再做一次反向操作,例如此图,我们就可以在进行一次腐蚀操作,如下:

import cv2
import numpy as np

img = cv2.imread(r'C:\Users\..\Pictures\Saved Pictures\liuge.jpg')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

#腐蚀操作,黑色侵蚀白色
kernel = np.ones((5, 5), np.uint8)
dilate1= cv2.dilate(img, kernel, iterations=1)
result = cv2.erode(dilate1, kernel, iterations=1)
cv2.imshow('result ', result )
cv2.waitKey(0)
cv2.destroyAllWindows()

先膨胀在腐蚀后的结果为:
在这里插入图片描述
通过先膨胀在腐蚀的操作,或先腐蚀在膨胀的操作(根据图像特点去判断)来去除图像中的一些划痕,污渍,毛刺等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值