title: How does cv2.floodfill work?
body: <p>here is a example code showing usage of cv2.floodfill function</p>
  
  <pre><code>import cv2
  import numpy as np
  import os
  
  def imshow(img):
      cv2.imshow('img', img)
      cv2.waitKey(0)
      cv2.destroyAllWindows()
  
  
  img = cv2.imread('test4.png')
  
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  
  thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY_INV,3,1)
  
  _, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_NONE)
  
  mask = np.zeros(img.shape[:-1],np.uint8)
  
  cv2.drawContours(mask,contours,-1,(255,255,255),-1)
  
  height, width = img.shape[:-1]
  
  mask1 = np.zeros((height+2, width+2), np.uint8)     # line 26
  cv2.floodFill(mask,mask1,(0,0),255)     # line 27
  mask_inv=cv2.bitwise_not(mask)
  
  imshow(mask_inv)
  </code></pre>
  
  <p>i am using this function in one of me projects but i am not understanding the mask1 part of the code (line 26 and line 27 )
  that is,</p>
  
  <p>why do we create the mask1 with shape h+2, w+2 for a given image with height-'h' and width-'w'?(line 26)</p>
  
  <p>why do we have to pass this mask1 to the cv2.floodfill function?(line 27)</p>
  
  <p>here is the input and output of the example code.</p>
  
  <p>input image
  <a href="https://i.stack.imgur.com/dAjs2.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/dAjs2.png" alt="input image"></a></p>
  
  <p>output image
  <a href="https://i.stack.imgur.com/j3ZTd.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/j3ZTd.png" alt="output image"></a></p>
  
  <p>please help</p>