数字图像处理(14): 形态学处理——图像顶帽运算和黑帽运算

目录

1 图像顶帽运算(原始图像 — 开运算)

1.1 基本原理

1.2 代码示例

2 图像黑帽运算(闭运算 — 原始图像)

2.1 基本原理

2.2 代码示例

参考资料


前面介绍了 形态学处理——图像开运算与图像闭运算,其中:

图像开运算先腐蚀,后膨胀。一般会平滑物体的轮廓、断开较窄的狭颈并消除细的突出物。

图像闭运算先膨胀,后腐蚀。同样也会平滑轮廓的一部分。但与开操作相反,它通常会弥合较窄的间断和细长的沟壑,消除小的孔洞,填补轮廓线中的断裂。

 

1 图像顶帽运算(原始图像 — 开运算)

1.1 基本原理

图像顶帽(或图像礼帽)运算是原始图像减去图像开运算的结果,得到图像的噪声。如下图所示:

顶帽运算:原始图像 — 图像开运算

 

 

1.2 代码示例

图像顶帽运算使用函数 morphologyEx() ,其参数 cv2.MORPH_TOPHAT 对应顶帽运算。

morphologyEx() 函数形式如下:

dst = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

其中,参数:

dst 表示处理的结果;

src 表示原图像;

cv2.MORPH_TOPHAT 表示顶帽运算;

kernel 表示卷积核。

例如,下图表示 5\times5 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

 

(1)卷积核大小为 5\times

代码如下所示:

#encoding:utf-8
import cv2
import numpy as np

#读取图片
src = cv2.imread('test5.bmp', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((5,5), np.uint8)

#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

 

运行结果如下图所示:

 

(2)卷积核大小为 15\times15 

代码如下所示:

#encoding:utf-8
import cv2
import numpy as np

#读取图片
src = cv2.imread('test5.bmp', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((15,15), np.uint8)

#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_TOPHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

 

运行结果如下图所示:


 

2 图像黑帽运算(闭运算 — 原始图像)

2.1 基本原理

图像黑帽运算是图像闭运算操作减去原始图像的结果,得到图像内部的小孔,或者前景色中的小黑点。如下图所示:

黑帽运算:闭运算 — 原始图像

 

2.2 代码示例

图像黑帽运算使用函数 morphologyEx() ,其参数 cv2.MORPH_BLACKHAT 对应黑帽运算。

morphologyEx() 函数形式如下:

dst = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

其中,参数:

dst 表示处理的结果;

src 表示原图像;

cv2.MORPH_BLACKHAT 表示黑帽运算;

kernel 表示卷积核。

例如,下图表示 5\times5 的卷积核,可以采用函数 np.ones((5,5), np.uint8) 构建。

 

(1)卷积核大小为 5\times5

代码如下所示:

#encoding:utf-8
import cv2
import numpy as np

#读取图片
src = cv2.imread('test6.bmp', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((5,5), np.uint8)

#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

 

运行结果如下图所示:

 

 

(2)卷积核大小为 15\times15

代码如下所示:

#encoding:utf-8
import cv2
import numpy as np

#读取图片
src = cv2.imread('test6.bmp', cv2.IMREAD_UNCHANGED)

#设置卷积核
kernel = np.ones((15,15), np.uint8)

#图像闭运算
result = cv2.morphologyEx(src, cv2.MORPH_BLACKHAT, kernel)

#显示图像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

 

运行结果如下图所示:

 


 

参考资料

[1] https://blog.csdn.net/Eastmount/article/details/83692456

[2] Python+OpenCV图像处理

  • 25
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechArtisan6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值