opencv中的膨胀与腐蚀

本文介绍了图像处理中膨胀和腐蚀的基本概念及OpenCV中的实现方法。通过具体代码示例展示了如何使用不同的内核形状进行图像的膨胀和腐蚀操作,并提供了动态调整内核大小的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

膨胀,直观上就是把白色区域扩大

腐蚀,与膨胀相反,缩小白色区域


膨胀

void dilate(InputArray src, OutputArray dst, InputArray kernel, 

Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONTANT, const Scalar & borderValue=morphologyDefaultBorderValue());

前三个参数就行了,后面的用默认参数

第一个参数 输入

第二个参数 输出

第三个参数 内核类型

第三个参数为NULL时,默认用一个3*3的方形内核

一般配合getStructuringElement函数来获得内核类型

这个函数有两个参数

第一个参数三选一

MORPH_RECT        内核为方形

MORPH_CROSS     内核为十字形

MORPH_ELLIPSE   内核为椭圆形

第二个参数为一个Size对象

代表内核大小


腐蚀

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

和dilate函数用法基本一致,只是效果相反


例子

#include <core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

Mat ma1;
Mat ma2;
Mat ma3;

int g_dilateCoreValue=0;
int g_erodeCoreValue=0;

void on_dilate(int, void*)
{
	dilate(ma1, ma2, getStructuringElement(MORPH_RECT, Size(g_dilateCoreValue + 1, g_dilateCoreValue + 1)));
	imshow("im2", ma2);
}

void on_erode(int, void*)
{
	erode(ma1, ma3, getStructuringElement(MORPH_RECT, Size(g_erodeCoreValue + 1, g_erodeCoreValue + 1)));
	imshow("im3", ma3);
}

int main()
{
	ma1 = imread("1.png");                                                     //读入要操作的图像

	imshow("im1", ma1);

	dilate(ma1, ma2, getStructuringElement(MORPH_RECT, Size(15,15)));          //膨胀,方形

	imshow("im2", ma2);

	dilate(ma1, ma2, getStructuringElement(MORPH_CROSS, Size(15, 15)));        //膨胀,十字

	imshow("im2_1", ma2);

	dilate(ma1, ma2, getStructuringElement(MORPH_ELLIPSE, Size(15, 15)));      //膨胀,椭圆

	imshow("im2_2", ma2);

	erode(ma1, ma3, getStructuringElement(MORPH_RECT, Size(15, 15)));          //腐蚀,方形

	imshow("im3", ma3);

	erode(ma1, ma3, getStructuringElement(MORPH_CROSS, Size(15, 15)));         //腐蚀,十字

	imshow("im3_1", ma3);

	erode(ma1, ma3, getStructuringElement(MORPH_ELLIPSE, Size(15, 15)));       //腐蚀,椭圆

	imshow("im2_3", ma3);

	createTrackbar("内核大小", "im2", &g_dilateCoreValue, 100, on_dilate);     //建立滑动条,动态观察核的大小变化时,图像的变化
	createTrackbar("内核大小", "im3", &g_erodeCoreValue, 100, on_erode);

	while (waitKey(10) != 27);

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值