膨胀和腐蚀操作的函数分别是erode和dilate,传递给他们的参数也都依次是原图像、形态学操作后的图像、结构元素ele。本程序中给出了3种结构元素类型,分别是
#define TYPE_MORPH_RECT (0) // 矩形 #define TYPE_MORPH_CROSS (1) // 十字交叉型 #define TYPE_MORPH_ELLIPSE (2) // 椭圆型再通过OpenCV提供的getStructuringElement函数创建Mat类型的结构元素。
getStructuringElement的参数依次是结构元素类型(OpenCV中提供了宏定义MORPH_RECT、MORPH_CROSS和MORPH_ELLIPSE表示)、结构元素大小。
这里我们首次接触了createTrackbar函数(声明在highgui.hpp中),该函数的功能是给窗口添加滑动条。其原型是:
CV_EXPORTS int createTrackbar( const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0);trackbarname为滑动条的名称,将会显示在滑动条的前面,参见结果中的图片显示; winname为窗口名; value为滑动条关联的变量,如上面程序中第一个滑动条关联到erode_ele_type,表示——当滑动条滑动变化时,erode_ele_type的值发生响应的变化; count表示滑动条能滑动到的最大值; TrackbarCallback onChange其实是这个函数的关键,是滑动条变化时调用的回调函数。当滑动条滑动时,value值发生变化,系统立刻调用onChange函数,执行相关的操作,回调函数的定义形式是固定的:
void onChange(int, void *)程序中的回调函数Erosion和Dilation函数的定义都遵循该形式:
static void Erosion(int, void *); static void Dilation(int, void *); 结果及实际应用对“黑白小猪”进行膨胀操作的变化(随着结构元素大小的变化)如下图:
对“黑白小猪”进行腐蚀操作的变化(随着结构元素大小的变化)如下图:
膨胀与腐蚀在图像处理中具有广泛的用途,比如提取车牌过程中,可以通过膨胀运算确定车牌的区域。如下图为通过sobel算子提取边缘后的车牌,