学习资料参考:
张平.《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:底帽运算
闭运算就是先膨胀再腐蚀。可以填充白色区域内的黑色小点
,将区域进行连接。
程序实现见开运算
顶帽和底帽
开运算可以消除背景下的较亮的区域,使用原图减去开运算的结果就可以得到原图中灰度较亮的区域,所以称白顶帽互换。
程序实现见开运算
闭运算可以消除背景下的较暗的区域,使用原图减去开运算的结果就可以得到原图中灰度较暗的区域,所以称黑底帽互换。
程序实现见开运算
形态学梯度
即膨胀结果减去腐蚀的结果,得到图像中物体的边界。因为膨胀是取领域内的最大值,而腐蚀是取领域内的最小值,从而两者相减可以得到边界值,即物体的轮廓。
程序实现见开运算