0041-在OpenCV环境下做FloolFill分割

关于FloolFill分割的原理,请大家参见我之前在CSDN博客上写的一篇文章,链接是:
http://blog.csdn.net/wenhao_ir/article/details/51967181

OpenCV提供了floodFill函数用来实现FloodFill泛洪填充算法,下面详细介绍这个函数。
原型如下:
C++: int floodFill(InputOutputArray image, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 )
C++: int floodFill(InputOutputArray image, InputOutputArray mask, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loDiff=Scalar(), Scalar upDiff=Scalar(), int flags=4 )
参数意义如下:
image:输入/输出图像,类型可以是1通道或3通道,8位,浮点型的图像。在第二种形式中,当标志FLOODFILL_MASK_ONLY被设置时,image会被修改。
mask:操作掩码图像,类型要求是单通道的8位图像。这个图像比image宽两个象素,高两个象素,原因是这个参数既是输入参数,也是输出参数,所以初始化时要留有余地以确保算法能进行,具体为什么要这样余地,大家需要去查这个算法实现的原理。
seedPoint:种子点。
newVal:填充颜色值。
rect:可选输出参数,重绘区域的最小边界。
loDiff:算法实现所需区间中的较小值。这个区间所限定的是当前观察象素与其同一组件的邻域之前的差值,或者是当前观察象素与同属于这个组件的种子象素值之间的差值。
upDiff:算法实现所需区间中的较大值。这个区间所限定的是当前观察象素与其同一组件的邻域之前的差值,或者是当前观察象素与同属于这个组件的种子象素值之间的差值。
flags:函数运算控制标志。
  前8位(即第0位到第7位)表示连接程度值,默认的4表示邻域的四个点参与运算,而值8则表示邻域的八个点参与运算。
  接下来的8位(即第8位到16位)表示mask的填充值。
  FLOODFILL_FIXED_RANGE:如果这个被设置,则表示参数loDiff和upDiff有效。
 FLOODFILL_MASK_ONLY :介绍image参数时已经说了这个标志的作用,当它被设置时,原图像不会被改变,此时只填充mask图像。

示例代码如下:
代码请加Q2034196302获取
代码请加Q2034196302获取
代码请加Q2034196302获取

运行结果如下图所示

从结果中可以看出,背景区域被分割出来并被填充为蓝色了。

猜你喜欢

转载自blog.csdn.net/opencv_source/article/details/83752957
今日推荐