这部分涉及到的函数有3个,方法却又7种。先说方法吧,基本的方法是腐蚀和膨胀,可以用cvErode()做腐蚀,用cvDilate()做膨胀。后面的五种方法是以腐蚀和膨胀作为基础的,一般是两者均使用,只是先用哪个,后用哪个而已。
前面一篇记录了腐蚀和膨胀,这里不再赘述了。
后面五种方法都用函数cvMorphologyEx()来做。
void cvMorphologyEx(const CvArr * src, CvArr* dst, CvArr* temp, IplConvKernel* element, int operation, int iteration=1);
temp是暂存数组,用于中间暂存图像;
operation就是操作方法,即选择五种方法:CV_MOP_OPEN 开运算, CV_MOP_CLOSE 闭运算, CV_MOP_GRADIENT梯度运算, CV_MOP_TOPHAT礼帽, CV_MOP_BLACKHAT黑帽
开运算是先腐蚀后膨胀,可用来统计二值图像中的区域数;
闭运算时先膨胀后腐蚀,可用于去除噪声引起的区域;
梯度运算:dilate(src)-erode(src); 可得粗线条轮廓;
礼帽:src-open(src);可得细线条轮廓
黑帽:close(src)-src; 可得细线条轮廓。