数字图像处理——OpenCV中的结构元和腐蚀膨胀使用

结构元

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() );

膨胀与腐蚀函数参数详解:

  1. 参数src为输入的Mat图像
  2. 参数dst为输出返回的Mat图像
  3. 参数kernel是getStructuringElement函数返回的Mat变量,也就是结构元变量
  4. 参数anchor为锚点,默认为Point(-1,-1)
  5. 参数borderType为边框类型,默认值为BORDER_CONSTANT
  6. 参数borderValue 为边框颜色值,默认为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<opencv2\opencv.hpp>
#include<iostream>
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;
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪野Solye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值