【功能】
腐蚀是对白色部分(高亮部分)而言的,腐蚀就是原图中的高亮部分被腐蚀,“领域被蚕食”,效果图拥有比原图更小的高亮区域。
腐蚀就是一个平移的结果匀速包含在 原图中的所有点的集合。
【原型】
void cv::erode( InputArray src, OutputArraydst, InputArray kernel,
Point anchor, int iterations,
int borderType, constScalar& borderValue )
{
//调用morphOp函数,并设定标识符为MORPH_ERODE
morphOp( MORPH_ERODE, src, dst, kernel, anchor, iterations, borderType,borderValue );
}
可以看到函数内部只是调用了一下morphOp()函数,函数第一个值为MOPRH_ERODE
参数1:InputArray类型的src,输入图像,填Mat类的对象即可。
参数2:OutputArray类型的dst,即目标图像,需要和输入图片有一样的尺寸和类型。
参数3:InputArray类型的kernel,膨胀操作的核。若为NULL时,表示的是使用参考点位于中心3x3的核。
参数4:Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。
参数5:int类型的iterations,迭代使用erode()函数的次数,默认值为1。
参数6:int类型的borderType,用于推断图像外部像素的某种边界模式,它有默认值BORDER_DEFAULT。
参数7:const Scalar&类型的borderValue,当边界为常数时的边界值,一般我们不用管。
【实例】
#include<opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include<iostream>
using namespace cv;
int main(int argc, char** argv) {
Mat image = imread("D:\\study\\picture\\a.jpg");
//内核矩阵,指定形状和尺寸为15*15的矩形
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
//腐蚀图片为output为第二个参数,第一个参数为原图片,第三个参数为内核矩阵
erode(image, dstImage, element);
imshow("[原图]腐蚀操作", image);
imshow("[效果图]腐蚀操作", dstImage);
waitKey(0);
return 0;
}
结果: