OpenCV提供了通用的形态学函数cvMorphologyEx,该函数能够实现开运算,闭运算,形态梯度,礼帽操作,黑帽操作
void cvMorphologyEx(const CvArr* src, CvArr* dst, CvArr* tmp, IplConvKernel* element, int operation, int iterations = 1);[1]
src:输入图像
dst:输出图像
tmp:临时图像,某些操作会用到。需要使用tmp时,它应与原图像有同样的大小
element:结构元素
operation:形态操作的类型,有以下几种可用的类型:
-CV_MOP_OPEN开运算不需要临时图像
-CV_MOP_CLOSE闭运算不需要临时图像
-CV_MOP_GRADIENT形态梯度需要临时图像
-CV_MOP_TOPHAT“礼帽”src = dst情况下需要
- //开运算
- cvMorphologyEx(
- src,
- img,
- temp,
- NULL, //default 3*3
- CV_MOP_OPEN,
- 4);
- cvShowImage("open", img);
- //闭运算
- cvMorphologyEx(
- src,
- img,
- temp,
- NULL, //default 3*3
- CV_MOP_CLOSE,
- 4);
- cvShowImage("close", img);
- //形态梯度
- cvMorphologyEx(
- src,
- img,
- temp,
- NULL, //default 3*3
- CV_MOP_GRADIENT,
- 3);
- cvShowImage("gradient", img);
- //cvWaitKey(0);
- //"礼帽"
- cvMorphologyEx(
- src,
- img,
- temp,
- NULL, //default 3*3
- CV_MOP_TOPHAT,
- 3);
- cvShowImage("topHat", img);
- //cvWaitKey(0);
- //“黑帽”
- cvMorphologyEx(
- src,
- img,
- temp,
- NULL, //default 3*3
- CV_MOP_BLACKHAT,
- 3);