Opencv之形态学操作(腐蚀、膨胀、开闭运算、顶帽、底帽)

学习资料参考:

张平.《OpenCV算法精解:基于Python与C++》.[Z].北京.电子工业出版社.2017.


腐蚀与膨胀

腐蚀通俗讲就是对于一张图像,设定一个核如3*3,然后进行类似卷积操作,将该核与原图进行一一匹配操作,每次保留该区域的最小值作为锚点的值。如此操作就可以去掉高亮的部分。将图像中较亮的物体尺寸变小,较暗的尺寸变大。

程序实现

# 库函数
# 参数分别为输入矩阵、结构元、结构元的锚点、腐蚀操作次数、边界扩充类型、边界扩充值
# 返回类型为处理后的图像
erode(src, element, anchor, iterations, boderType, boderValue)

# 产生结构元的函数
# 参数分别为结构元的形状、结构元的尺寸、结构元的锚点
# 返回类型为结构元
s = getStructuringElement(shape,ksize,anchor)

膨胀与腐蚀只有一点不同,就是每次保留该区域的最大值作为锚点的值。将图像中较亮的物体尺寸变大,较暗的尺寸变小。

程序实现

# 库函数
# 参数分别为输入矩阵、结构元、结构元的锚点、腐蚀操作次数、边界扩充类型、边界扩充值
# 返回类型为处理后的图像
dilate(src, element, anchor, iterations, boderType, boderValue)

开闭运算

开闭运算是在腐蚀和膨胀的基础上进行的。
开运算就是先腐蚀再膨胀。可以消除亮度较高的小区域,在纤细点处进行区域分离。
程序实现

# 库函数
# 参数分别为输入矩阵、形态学各种操作、结构元、结构元的锚点、迭代次数
# 返回类型为处理后的图像
morphologyEx(src,op,element,anchor,iterations)

# 可选的形态学操作有
# MORPH_OPEN:开运算
# MORPH_CLOASE:闭运算
# MORPH_GRADIENT:形态梯度
# MORPH_TOPHAT:顶帽运算
# MORPH_BLACKHAT:底帽运算

闭运算就是先膨胀再腐蚀。可以填充白色区域内的黑色小点,将区域进行连接。
程序实现见开运算


顶帽和底帽

开运算可以消除背景下的较亮的区域,使用原图减去开运算的结果就可以得到原图中灰度较亮的区域,所以称白顶帽互换。
程序实现见开运算
闭运算可以消除背景下的较暗的区域,使用原图减去开运算的结果就可以得到原图中灰度较暗的区域,所以称黑底帽互换。
程序实现见开运算


形态学梯度

即膨胀结果减去腐蚀的结果,得到图像中物体的边界。因为膨胀是取领域内的最大值,而腐蚀是取领域内的最小值,从而两者相减可以得到边界值,即物体的轮廓。
程序实现见开运算

猜你喜欢

转载自blog.csdn.net/qq_44116998/article/details/124651417