花老湿学习OpenCV:膨胀和腐蚀

前言:

图像形态学操作 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学

形态学有四个基本操作:腐蚀、膨胀、开、闭

膨胀与腐蚀是图像处理中最常用的形态学操作手段。

形态学操作-膨胀、腐蚀:

跟卷积操作类似,假设有图像A和结构元素B,结构元素BA上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。腐蚀跟膨胀操作的过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值。

 

相关API:

为形态学操作返回指定大小和形状的结构化元素。

函数构造并返回结构元素,这些元素可以进一步传递给erode、dilate或morphologyEx。

 shape:1)MORPH_RECT 表示产生矩形的结构元

                2)MORPH_ELLIPSEM 表示产生椭圆形的结构元

                3)MORPH_CROSS 表示产生十字交叉形的结构元

    ksize:表示结构元的尺寸,即(宽,高),必须是奇数
    anchor:表示结构元的锚点。

 

创建跟踪栏并将其附加到指定窗口。

膨胀操作

腐蚀操作

代码示例:

首先读取并显示一副图片,然后创建跟踪栏,分别对源图像进行膨胀与腐蚀操作,并通过跟踪栏设置结构化元素的大小,比较膨胀与腐蚀的效果。

#include "pch.h"
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

void Callback_demo(int pos, void *userdata);

int main()
{
	Mat src = imread("F:\\visual studio\\Image\\women1.jpg");
	if (src.empty())
	{
		cout << "Can't load the image" << endl;
		return -1;
	}
	imshow("src", src);
	
	int elementSize = 0;
	int maxSize = 21;
	createTrackbar("Element Size", "src", &elementSize, maxSize, Callback_demo, (void*)(&src));
	waitKey(0);

}

void Callback_demo(int pos, void *userdata)
{
	cout << pos << endl;
	Mat mat = *((Mat*)userdata);
	int size = 2 * pos + 1;
	Mat structureElement = getStructuringElement(MORPH_RECT, Size(size, size), Point(-1, -1));
	Mat dst;
	dilate(mat, dst, structureElement, Point(-1, -1));
	//erode(mat, dst, structureElement, Point(-1, -1));
	imshow("src", dst);
}

膨胀效果如下:

 

腐蚀效果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值