floodFill函数

来源:互联网 发布:阿里巴巴农村淘宝网店 编辑:程序博客网 时间:2024/06/04 18:15

C++: int floodFill(InputOutputArray image, Point seedPoint, Scalar newVal, Rect* rect=0, Scalar loD-iff=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 )Parametersimage –输入图像必须为1或者三通道,数据位数可以8位,也可以是浮点数。mask – mask是一个模板,必须是单通道,数据位数必须是8位,高和宽都要比源图像大两个单位(因为要做模板运算)。 mask要根据自己的需要进行初始化,函数会根据它进行计算,同时也会自动更新此矩阵。进行填充的时候,不会越过maks中非0的点。也就是mask非0的点组成了边界,将原图像划分不同连通区域,然后对不同区域分别填充。所以,可以将边缘提取的结果作为mask. Note: 需要稍微注意的是,原图像的(x,y)对应mask的(x+1,y+1)seedPoint – 种子点,开始填充的起点。newVal – 用来填充区域的颜色值.loDiff – 当前点和邻居点或者种子点差值的下界upDiff – 当前点和邻居点或者种子点差值的上界rect – 可选参数,用来最小化填充区域。flags –操作标志. 低位用来自定是8近邻还是4近邻,默认为4. 高位可以填充0,或者可以使用下面两种操作– FLOODFILL_FIXED_RANGE 如果设置的话,那么只考虑当前点和种子点的差值。差值在下界和上界之间,就认为当前点和种子点属于同一连通区域,简便起见,这种情况称为fixed range。否则,就考虑当前点和邻点的差值,必须满足和每一个邻点的差值都没有越过两个界限,这时才认为当前点和邻点属于同一连通区域,这种情况称为floating range。– FLOODFILL_MASK_ONLY  如果设置这个标志,那么将不会填充原图像,第二个参数会被忽略。但是会填充mask矩阵。函数从指定的种子点开始填充区域。 点的连通性根据color/brightness的差值进行判断。  点(x,y)的像素属于某一填充区域,当且仅当满足以下条件




color image and fixed range的时候,类似于第一种情况,只需要同样替换就可以了。
0 0