使用分水岭算法执行基于标记的图像分割。
void cv::watershed(InputArray image,
InputOutputArray markers
)
该函数实现了 [171] 中描述的分水岭、基于非参数标记的分割算法的变体之一。
在将图像传递给函数之前,您必须用正 (>0) 索引粗略地勾勒出图像标记中所需的区域。 因此,每个区域都表示为一个或多个具有像素值 1、2、3 等的连通分量。 可以使用 findContours 和 drawContours 从二进制掩码中检索此类标记(请参阅 watershed.cpp 演示)。 标记是未来图像区域的“种子”。 标记中的所有其他像素,其与轮廓区域的关系未知,应由算法定义,应设置为 0。 在函数输出中,标记中的每个像素都设置为“种子”组件的值,或者在区域之间的边界处设置为 -1。
注意
任何两个相邻的连通分量不一定被分水岭边界(-1 的像素)分开; 例如,它们可以在传递给函数的初始标记