预备知识
结构元(SE)
1、结构元的中心一般来说是放在其重心位置处,但原则上原点的选择是依赖于你要解决的问题的。
 2、对图像操作时,我们要求结构元是矩形阵列。(在结构元的基础上添加较少的背景元素实现)
 3、当结构元的中心位于原图像的边界时,要对原图像进行填充操作
2注意点中的填充阵列:
 但是其实这样填充下来,只要给背景元素的权值赋0就和原来的一样了。
 这个阵列显然和下面的阵列不是一个类型
 3注意点中的填充原图像
原理
腐蚀

 该表达式表示:B对A的腐蚀使用一个z平移的B包含在A中的所有点z的集合。
 效果:
 也就是B的中心在A中遍历之后,结构元素中没有背景元素(即全是前景元素)的B中心的点的集合。
膨胀


 膨胀是腐蚀的对偶操作。相当于将B的中心沿着所有A的点遍历一遍,得到的B的所有元素的集合。
调用opencv库函数
using namespace cv;
using namespace std;
int main()
{
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);    //字体为绿色
  Mat srcImage = imread("D:\\opencv_picture_test\\形态学操作\\黑白.jpg");
  //判断图像是否加载成功
  if (srcImage.empty())
  {
    cout << "图像加载失败!" << endl;
    return -1;
  }
  else
    cout << "图像加载成功!" << endl << endl;
  namedWindow("原图像", WINDOW_NORMAL);     //定义窗口显示属性
  imshow("原图像", srcImage);
  
  //进行腐蚀操作
  Mat element_erode = getStructuringElement(MORPH_RECT,Size(15,15));  //返回的是内核矩阵
  Mat dstImage;
  erode(srcImage, dstImage, element_erode);         //腐蚀操作
  //显示效果图
  imshow("【腐蚀效果图】", dstImage);
  //进行膨胀操作
  //获取自定义核
  Mat element_dilate = getStructuringElement(MORPH_RECT, Size(15, 15));
  Mat out;
  //进行膨胀操作
  dilate(srcImage,out, element_dilate);
  imshow("【膨胀效果图】", out);
  waitKey(0);
  return 0;
}效果

作用
腐蚀的作用
消除A中比结构元B小的部件。去除黏连像素以及噪声。

膨胀的作用
桥接裂缝,恢复连通性
 作用:如图,由于无法实现理想的二值化,使得原本连通的像素集合被
 分成不同的连通域,从而影响目标物的提取。可通过膨胀运算使其恢复
 连通性。
 这种方法比低通滤波有一个直接优点:形态学桥接可以直接得到一个二值化的图,
 然而低通滤波则需要经过这样过程:二值图=>灰度图=>二值图。
另外需要了解的知识:


之后的击中击不中变换中将会用到这样的知识。
上面是以二值图为例的,下面我们以灰度图作为例子。
 效果:使整个图像变暗且去除了局部较亮的像素
 效果:使整个图像变亮且去除了局部较暗的像素
                
                










