OpenCV之图像膨胀:dilate函数(C++实现)

dilate函数是使用像素邻域内的局部极大运算符来膨胀图像。

函数原型:

void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor=Point(-1, -1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue());

参数详解:

  • 第一个参数:InputArray类型的src,输入图像,Mat类的对象即可。图像的通道数可以是任意的,但是图像的深度应该是CV_8U,CV_16U,CV_16S,CV_32F,CV_64F之一。
  • 第二个参数:OutputArray类型的dst,目标图像,需要和输入图像有一样的尺寸和类型。
  • 第三个参数:InputArray类型的kernel,膨胀操作的核。当为NULL时,表示的是使用的是参考点位于中心3*3的核。

      通常使用函数getStructuringElement配合这个参数使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。其中getStructuringElement函数的第一个参数表示内核的形状,一共有三种形状可以选择:

      矩形:MORPH_RECT

      交叉形:MOTPH_CROSS

      椭圆形:MOTRPH_ELLIPSE

     而getStructuringElement函数的第二个参数和第三个参数分别是内核的尺寸以及锚点的位置。

      一般在定义erode和dilate函数之前,先定义一个Mat类型的变量来得到getStructuringElement函数的返回值。对于锚点的位置,默认是Point (-1, -1),表示锚点位于中心。十字形的element形状唯一依赖于锚点的位置,而其他情况,锚点只影响了形态学运算结果的偏移。

  • 第四个参数:Point类型的anchor,锚点的位置,默认值是 (-1, -1),表示位于中心。
  • 第五个参数:int类型的iterations,迭代的次数,默认值是1。
  • 第六个参数:int类型的borderType,用于推断图像外部像素的某种边界模式,默认值是BORDER_DEFAULT。
  • 第七个参数:const Scalar&类型的borderValue,一般不管它。

代码示例:

#include 
#include 
#include 
#include 

using namespace std;
using namespace cv;
int main() {
    Mat srcImage;
    srcImage = imread("/Users/dwz/Desktop/cpp/1.jpg");

    Mat element;
    element = getStructuringElement(MORPH_RECT, Size(5, 5));

    Mat dstImage;
    dilate(srcImage, dstImage, element);
    imwrite("dilate.jpg", dstImage);
    return 0;
}

输入图像:

OpenCV之图像膨胀:dilate函数(C++实现)_第1张图片

输出:

OpenCV之图像膨胀:dilate函数(C++实现)_第2张图片

 

 

 

 

你可能感兴趣的:(C++,opencv,图像处理,opencv,计算机视觉,c++)