getStructuringElement函数会返回指定形状和尺寸的结构元素。
Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));
这个函数的第一个参数表示内核的形状,有三种形状可以选择。
矩形:MORPH_RECT
;
交叉形:MORPH_CROSS
;
椭圆形:MORPH_ELLIPSE
;
第二和第三个参数分别是内核的尺寸以及锚点的位置。
一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。
对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。StructuringElement形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。
getStructuringElement函数相关调用如下:
int g_nStructElementSize = 3; //结构元素(内核矩阵)的尺寸
Mat element = getStructuringElement(MORPH_RECT,Size(g_nStructElementSize,g_nStructElementSize));
erode dilate
void func( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
膨胀与腐蚀函数参数详解:
Point(-1,-1)
BORDER_CONSTANT
morphologyDefaultBorderValue()
使用5x5结构元进行测试。
//创建结构元
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
//创建结构元
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
//腐蚀
erode(src, dst, element, Point(-1,-1), 2);
//创建结构元
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
//膨胀
dilate(src, dst, element, Point(-1,-1), 2);
#include
#include
using namespace cv;
using namespace std;
void geterodeImg(Mat src, Mat dst) {
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
erode(src, dst, element, Point(-1,-1), 2);
}
void getdilateImg(Mat src, Mat dst) {
Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
dilate(src, dst, element, Point(-1,-1), 2);
}
int main() {
Mat src = imread("./A1.bmp", 0);
imshow("原图", src);
Mat erodeImg;
erodeImg.create(src.size(), src.type());
geterodeImg(src, erodeImg);
imshow("腐蚀", erodeImg);
Mat dilateImg;
dilateImg.create(src.size(), src.type());
getdilateImg(src, dilateImg);
imshow("膨胀", dilateImg);
waitKey(0);
return 0;
}