OpenCV-学习历程9- 膨胀与腐蚀(Dilate/erosion)(+createTrackbar 交互拖块)

 OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。

一.膨胀和腐蚀的原理 (图像的形态学操作)

                                  

                     

                     

二.相关API 

2.1 (形态学元素,膨胀+腐蚀)

                

2.2 (动态调整结构元素的大小)

扫描二维码关注公众号,回复: 12493807 查看本文章

三.代码示例

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


using namespace std;
using namespace cv;

Mat src, dst;

int element_size = 3;
int max_size = 21;

void CallBack_Demo(int, void*);

char Output_title[] = "Output_image";


int main(int argc, char** argv) {

	//Step1 读取图片
	src = imread("E:/OpenCVLearning/Project/source_image/image2.jpg"); //注意斜线方向
	if (!src.data) {
		cout << "Could not load the image ...." << endl;
		return -1;
	}

	//Step2 自定义输入输出窗口
	char input_title[] = "input image";
	namedWindow(input_title,CV_WINDOW_AUTOSIZE);
	imshow(input_title, src);

	namedWindow(Output_title, CV_WINDOW_AUTOSIZE);

	//重要!! 添加可视化拖动块,以便于调整参数
	//        (标题名称, bar所在窗口名称, &被调整参数,最大范围, !调整参数之后,运行的程序)
	createTrackbar("Element Size :", Output_title, &element_size, max_size, CallBack_Demo); //!!!!



	waitKey(0);
	return 0;
}

void CallBack_Demo(int,void*) {
	int s = element_size * 2 + 1;

	//创建碰撞形态学mask!!  
	// (形态学元素,mask大小,mask中心所在位置)
	Mat structureElement = getStructuringElement(MORPH_RECT,Size(s,s), Point(-1,-1));

	//执行膨胀操作(输入,输出,mask,mask中心位置)
	//dilate(src, dst, structureElement, Point(-1, -1), 1);

	//执行腐蚀操作(输入,输出,mask,mask中心位置)
	erode(src, dst, structureElement);

	imshow(Output_title, dst);
	return;
}

四.运行效果

4.1 膨胀

4.2 腐蚀效果

猜你喜欢

转载自blog.csdn.net/weixin_42503785/article/details/113926280