opencv-膨胀 dilate()

本文介绍了膨胀操作在图像处理中的概念,如何通过OpenCV的dilate函数实现,以及一个实际的C++示例。核心内容包括膨胀的定义、核与图像处理的关系,以及如何使用Mat和getStructuringElement等工具进行操作。
摘要由CSDN通过智能技术生成

【功能】

膨胀是对白色部分(高亮部分)而言的,膨胀就是图像中的高亮部分进行膨胀,“领域扩张”,效果图拥有比原图更大的高亮区域。

膨胀是结构元素反射的平移与处理的图像的交集不为空。(结构元素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;

}

结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值