形态学操作
膨胀,腐蚀,开运算,闭运算
获取结构元素
Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
shape:形状(矩形MORPH_RECT,十字MORPH_CROSS,椭圆MORPH_ELLIPE)
ksize:结构元素大小
anchor:锚点位置
膨胀
原理:结构元素可以是任意形状,结构元素中心为锚点,用结构元素的最大值替换锚点的值(即扩大白色区域)
void dilate( InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1,int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() );
src:图像
dst:目标图像
kernel:结构元素
anchor:锚点位置
iterations:执行次数
borderType:边界填充模式
borderValue:边界值
腐蚀
原理:与膨胀的区别是,用结构元素的最小值替换锚点的值(即扩大黑色区域)
void erode( InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() );
src:图像
dst:目标图像
kernel:结构元素
anchor:锚点位置
iterations:执行次数
borderType:边界填充模式
borderValue:边界值
其它
开操作:先腐蚀后膨胀,去掉小的前景色(白)对象
闭操作:先膨胀后腐蚀,去掉小的背景色(黑)对象
形态学梯度:膨胀减去腐蚀
顶帽:原图减去开操作(留下小的前景色(白)对象)
黑帽:闭操作减去原图 (留下小的背景色(黑)对象)
void morphologyEx( InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue() );
src:图像
dst:目标图像
op:形态学操作类型(CV_MOP_OPEN,CV_MOP_CLOSE,CV_MOP_GRADIENT,CV_MOP_TOPHAT,CV_MOP_BLACKHAT)
kernel:结构元素
anchor:锚点位置
iterations:执行次数
borderType:边界填充模式
borderValue:边界值