七、 图像形态学处理
图像形态学是基于数学拓扑学的概念,主要分析图像几何结构,几何距离、形状、连通性和边界等特点,包括腐蚀(erosion)、膨胀(dilation)、开(opening)、闭(closing)四种基本运算。图像形态学操作一般用于二值图像。二值图像是一种2bit图像,每个像素点的值只有0和1两种情况,二值图像的处理运算速度快,方便提取图像的某些典型的信息,因此广泛地用于各类图像处理中。步骤通常是先依据某些规则将图像二值化,经过处理后提取特征再进行识别。
1、 图像腐蚀
图像腐蚀操作可以缩小图形边界,使整个图形边界向内部收缩。过程描述为对图形A用模板B来腐蚀,将A中每个点扩大成B的形状,若该点仍然包含在A中,则保留,若该点扩大后存在不在A之内的区域,则该点被腐蚀。腐蚀模板可根据具体需求,取正方形、菱形、圆形、十字形等,具体操作可以等效为取模板内的最小值,对二值图像来说,对应点的模板内区域若存在0,则该点被腐蚀。
Opencv函数 做腐蚀操作
CVAPI(void) cvErode( const CvArr* src, CvArr* dst,
IplConvKernel* element CV_DEFAULT(NULL),
int iterations CV_DEFAULT(1) );
参数一:源图像
参数二:输出图像
参数三:结构核元素,默认NULL为3*3矩形
参数四:腐蚀次数,默认1次
注:腐蚀操作实际上是取模板区域内的最小值,对于灰度图像来说,值越大越接近白色,腐蚀操作会让黑色区域变小,白色区域变大。
Opencv函数 创建结构元素,作为腐蚀膨胀的参数
CVAPI(IplConvKernel*) cvCreateStructuringElementEx(
int cols, int rows, int anchor_x, int anchor_y,
int shape, int* values CV_DEFAULT(NULL) );
参数一:列数目
参数二:行数目
参数三:锚点的水平偏移量,为0时以结构元素水平中心做操作
参数四:锚点的垂直偏移量,为0时以结构元素垂直中心做操作
参数五:结构元素形状
enum MorphShapes_c
{
CV_SHAPE_RECT =0,
CV_SHAPE_CROSS =1,
CV_SHAPE_ELLIPSE =2,
CV_SHAPE_CUSTOM =100 //自定义元素
};
参数六:当参数5是自定义元素时,表示自定义元素的数组指针,其中非零值表示属于该结构元素形状中的一点;当为NULL时,表示默认的矩形形状。
代码如下:
IplImage *g_src, *dst;
g_src = cvCreateImage(cvGetSize(m_ipl), IPL_DEPTH_8U,