(09)膨胀和腐蚀

/*
*膨胀和腐蚀
	*形态学操作
		图像形态学操作-基于形状的一系列图像处理操作的集合,主要是基于集合论基础上的形态学数学
		形态学有四个基本操作:腐蚀、膨胀、开、闭
	*形态学操作-膨胀
		跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,
		计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状
	*形态学操作-腐蚀
		腐蚀跟膨胀操作过程类似,唯一不同的是以最小值替换锚点重叠下图像的像素值
	*相关的API:
		getStructuringElement(int shape, Size ksize, Point anchor) 这个得出来的也相当掩膜,只是名称不一样啦
		参数分别为:形状(MORPH_RECT\MORPH_CROSS\MORPH_ELLIPSE),大小:一定要是奇数,锚点:默认是Point(-1, -1)意思是中心像素
		膨胀:dilate(src, dst, kernel) //参数:kernel是getStructuringElement得到的结构体,结构元素
		腐蚀:erode(src, dst,, kernel)
	*动态调整结构元素大小
		TrackBar-createTrackbar(const String &trackbarname, const String winName, int *value, int count, Trackbarcallback func, void *userdara = 0)
		其中最重要的是callback函数功能,如果设置为NULL就是说只有值update, 但是不会调用callback的函数
*/

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

//为了达到动态调整大小的目的,首先要设定结构元素的大小
int element_size = 3;
int max_size = 21;
void CallBack_Demo(int, void*);

Mat src, dst;

int main(int argc, char** argv)
{
	
	src = imread("D:/A_Graduation/learning/opencv/tangwei.jpg");

	if (!src.data)
	{
		printf("Could not load image src1...\n");
		return -1;
	}

	char input_win[] = "input image"; 
	namedWindow(input_win, CV_WINDOW_AUTOSIZE);
	imshow(input_win, src);

	namedWindow("output window", CV_WINDOW_AUTOSIZE);

	createTrackbar("Element Size:", "output window", &element_size, max_size, CallBack_Demo); 
	//参数分别为:这个Trackbar的名字,"output window"这个窗口上去, “窗口”每次调整值的大小, 它的最大值, callback方法
	//这个Trackbar就被放到"output window"窗口上面去了,然后调用CallBack_Demo(),以后当,在Trackbar上拉动这个滑块的时候,它就会自动CallBack_Demo这个方法,然后就会把CallBack_Demo这个方法里面的这些东西给显示出来

	CallBack_Demo(0, 0);

	waitKey(0);

	return 0;
}

void CallBack_Demo(int, void*) //我们在这里面去做我们结构元素的调整
{
	int s = element_size * 2 + 1;
	Mat structringElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));//结构元素,形状是矩形, Size是(s, s), 锚点为中心点
	//dilate(src, dst, structringElement, Point(-1, -1));//膨胀
	erode(src, dst, structringElement); //腐蚀
	imshow("output window", dst);
	return;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值