一、腐蚀
把当前像素替换成所定义像素集合中的最小值像素。图像腐蚀后物体尺寸会缩小,有些面积较小的物体会彻底消失,可看作背景的噪声被消除。
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()
)
例如:
cv::erode(image, erodedImage, cv::Mat(), cv::Point(-1, -1), 3);
cv::Point(-1, -1)表示原点是矩阵的中心点,cv::Mat()表示使用一个默认的3 x 3的矩形结构元素,最后的3代表进行3次腐蚀迭代。
二、膨胀
把当前像素替换成所定义像素集合中的最大值像素。膨胀后物体的尺寸会变大,一些空洞会被填满。
void cv::dilate(InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
三、开运算
开运算是对图像先腐蚀后膨胀。开运算会消除背景中的小物体,所有小到不能容纳完整结构元素的物体都会被移除。可以用来消除因图像噪声产生的斑点。
void cv::morphologyEx(InputArray src,
OutputArray dst,
int op,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
)
其中,kernel可以通过getStructuringElement产生。
将op设置为以下几种
MORPH_OPEN就是开运算。
四、闭运算
闭运算是对图像先膨胀后腐蚀。闭运算会把邻近的物体连接起来,所有小到不能容纳完整结构元素的空隙或者间隙都会被消除。 可以把错误分裂成小碎片的物体连接起来。
将三节中的op设置为MORPH_CLOSE就是闭运算。