图像形态学主要有四个操作,即膨胀、腐蚀、开运算和闭运算
(1)在讨论四个操作之前,我们先看看核结构
IplConvKernel* cvCreateStructingElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape, int* values = null );
void cvReleaseStructingElement( IplConvKernel** element );
(2)膨胀:将一些图像(I)与核(T)进行卷积
核可以是任意形状,多为正方形或者圆形,核可以视为模板或掩码,膨胀是求局部最大值的操作
膨胀常用于填补凹洞
void cvDilate( IplImage* src, IplImage* dst, IplConvKernel* B = NULL, int iterations = 1 );
(3)腐蚀:腐蚀操作即求核区域像素的最小值。
腐蚀能够消除细的凸起
void cvErode( IplImage* src, IplImage* dst, IplConvKernel* B = NULL, //B即核,下同 int iterations = 1 //如名,迭代次数,下同 );
(4)开运算:先腐蚀后膨胀,消除高于其邻近点的孤立点
(5)闭运算: 先膨胀后腐蚀,消除低于其邻近点的孤立点
(6)opencv提供了更通用的形态学操作
void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp, //缓存数组,大小影后源图像大小相同 IplConvKernel* element, int operation, //包括CV_MOP_OPEN,CV_MOP_CLOSE,CV_MOP_GRADIENT,CV_MOP_TOPHAT,CV_MOP_BLACKHAT int iterations = 1 //此处的迭代可能会让人误解,以为对闭操作(或其他)的迭代是膨胀-腐蚀-膨胀-腐蚀,实际上是膨胀-膨胀-腐蚀-腐蚀 );
如果觉得我说的不太清楚,请参见http://www.zwqxin.com/archives/image-processing/morphologic-process.html