opencv学习十二----形态学操作----腐蚀,膨胀,开,闭 以及形态学梯度

形态学操作(morphology operators)

  • 图像形态学操作- 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学
  • 形态学有四个基本操作:腐蚀,膨胀,开,闭
  • 膨胀与腐蚀是图像处理中最常用的形态学操作手段

膨胀

  • 和卷积操作类似,假设有图像A和数据结构B ,结构元素B在A上移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状

腐蚀

  • 以最小值替换锚点像素值

开操作-open

  • 先腐蚀后膨胀
  • 开操作是一般使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。
  • 可以去除噪声,当然也可以提取水平线等等,第十三篇line就使用开操作

闭操作-close

  • 先膨胀后腐蚀
  • 假设对象是前景色,背景是黑色,可以填充小的洞

形态学梯度(morphological gradient)

  • 膨胀减去腐蚀
  • 又称为基本梯度(其他还包括 内部梯度,方向梯度)

顶帽-top hat

  • 原图像与开操作之间的差值

黑帽

  • 闭操作图像与原图之间的差值

API

getStructuringElement(shape,Size,Point(-1,-1))

  • 用于获取结构元素
  • 基本定义
 Mat kernel=getStructuringElement(int shape ,Size ksize ,Point anchor//Point(-1,-1));
  • 参数说明
    shape//可选择MORPH_RECT(矩形) , MORPH_CROSS(十字) , MORPH_ELLIPSE(椭圆)

dilate(src,dst,kernel)

  • 膨胀

erode(src,dst,kernel)

  • 腐蚀

createTrackbar()

  • 创建一个滑动控件
  • 基本定义
createTrackbar(const string& trackbarname, const string& winname,  
               int* value, int count,                              
               TrackbarCallback onChange = 0, void* userdata = 0);

参数解释
trackbarname:控件名称
winname:显示控件的窗口名称
*value:&初始化阈值
count:最大刻度值
TrackbarCallback:回调函数
比如

int value=127;
int count=255;
createTrackbar("thresh:","out_win",&value,count,callback_demo);

代码演示

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
Mat src, dst;
int element_size = 2;
int max_size = 21;
void Callback_demo(int, void*);
int main(int argc, char** argv)
{
 src = imread("D:/vcprojects/kaicaozuo.png");
 if (src.empty())
 {
  printf("could not load image...\n");
  return -1;
 }
 namedWindow("OUTPUT_WIN", WINDOW_AUTOSIZE);
 createTrackbar("element size:", "OUTPUT_WIN", &element_size, max_size, Callback_demo);
 Callback_demo(0, 0);
 waitKey(0);
 return 0;
}
void Callback_demo(int, void *)
{
 int s = 2 * element_size + 1;
 Mat structure=getStructuringElement(MORPH_RECT, Size(s,s), Point(-1, -1));
 dilate(src, dst, structure, Point(-1, -1), 1);
  erode(dst, dst, structure);
 imshow("OUTPUT_WIN", dst);
 return;
}

结果

opencv学习十二----形态学操作----腐蚀,膨胀,开,闭 以及形态学梯度
opencv学习十二----形态学操作----腐蚀,膨胀,开,闭 以及形态学梯度
opencv学习十二----形态学操作----腐蚀,膨胀,开,闭 以及形态学梯度