【功能】
膨胀是对白色部分(高亮部分)而言的,膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。
膨胀是结构元素反射的平移与处理的图像的交集不为空。(结构元素B 与 图像 A 中所覆盖的区域的交集)
膨胀就是求局部最大值的操作,核B与图形卷积,即计算核B覆盖的区域的每个像素点的最大值,并把这个最大值赋值给当前B覆盖的那个像素点。
【原型】
void cv::dilate( InputArray src,OutputArray dst, InputArray kernel,
Point anchor, int iterations,
int borderType, constScalar& borderValue )
{
//调用morphOp函数,并设定标识符为MORPH_DILATE
morphOp( MORPH_DILATE, src, dst, kernel, anchor, iterations, borderType,borderValue );
}
可以看到函数内部只是调用了一下morphOp()函数,函数第一个值为MOPRH_DILATE
参数1:InputArray类型的src,输入图像,填Mat类的对象即可。
参数2:OutputArray类型的dst,即目标图像,需要和输入图片有一样的尺寸和类型。
参数3:InputArray类型的kernel,膨胀操作的核。若为NULL时,表示的是使用参考点位于中心3x3的核。
参数4:Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。
参数5:int类型的iterations,迭代使用dilate()函数的次数,默认值为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为第二个参数,第一个参数为原图片,第三个参数为内核矩阵
dilate(image, dstImage, element);
imshow("[原图]腐蚀操作", image);
imshow("[效果图]腐蚀操作", dstImage);
waitKey(0);
return 0;
}
结果: