OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。
一.膨胀和腐蚀的原理 (图像的形态学操作)
二.相关API
2.1 (形态学元素,膨胀+腐蚀)
2.2 (动态调整结构元素的大小)
扫描二维码关注公众号,回复:
12493807 查看本文章
![](/qrcode.jpg)
三.代码示例
#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 腐蚀效果