OpenCV学习笔记2 ----- 核,腐蚀,膨胀,开运算,闭运算
目录
1、核
看过一些理解,核就是一个小的矩阵(5*5,7*7 等等),在形态学操作过程中(例如腐蚀,膨胀,开运算,闭运算),一般是对二值化后的图像进行操作,此过程中的对象一般有两个,一个是原图像,即要进行处理的图像,另一个就是 结构化元素或核。
核既然类似看做是一个数组,可以自己定义,也可以通过getStructuringElement函数获得指定大小(Size(m,n)就是m*n大小的矩阵 )和形状(矩形,圆等)核。
除了核矩阵的大小外,还有一个参数就是核的锚点,锚点是一个Point类型的点,表示为自定义核矩阵中心点在哪。
核 在形态学处理时的作用过程,就是这个矩阵从原图像左上角开始滑动,遍历完整个图像同时一直进行运算的过程,此过程中会给锚点赋予新的值,从而实现不同的形态学处理。
类似于这样:
gif来自:https://www.jianshu.com/p/6873ac33f9a8
2、图像腐蚀
首先对于腐蚀,膨胀的作用大概有:
- 消除噪音
- 隔离单个元素并连接图像中的不同元素。
- 查找图像中的强度凸点或孔
腐蚀操作,计算给定内核区域的局部最小值,当内核在图像上扫描时,我们计算由重叠的最小像素值,并用该最小值替换锚点下的图像像素。产生的效果类似于图像的高亮区域逐渐减少。
OpenCV 提供: erode函数
void cv::erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
src 输入的图像;
dst 输出的图像;
kernel 用于侵蚀的结构元素(核)。可以使用getStructuringElement来创建结构元素。。
anchor 结构元素的锚点位置,默认值value(-1,-1)表示锚点位于结构元素中心
iterations 腐蚀操作被递归执行的次数
borderType 推断边缘类型,可参考BorderTypes
borderValue 在边框不变的情况下的边界值
3、图像膨胀
膨胀与腐蚀类似,当内核在图像上扫描时,我们计算由重叠的最大像素值,并用该最大值替换锚点位置中的图像像素。这种最大化的操作会使图像中的亮区“增长”
OpenCV 提供: dilate函数,此函数传参与erode相同。
4、开闭运算
开操作是先腐蚀,后膨胀。可以平滑物体轮廓,断开狭窄的间断和消除细小的突出物。它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。
闭操作是先膨胀,后腐蚀。可以消弭狭窄的间断,消除小的孔洞。它具有填充物体内细小空洞,连接邻近物体和平滑边界的作用。
运用函数morphologyEx可实现开闭运算。