title: Use cv2.connectedComponents and eliminate elements with a small number of pixels
body: <p>I want to use the function cv2.connectedComponents to connect components on a binary image, like the following...</p>
  
  <p><a href="https://i.stack.imgur.com/jK4YF.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/jK4YF.jpg" alt="enter image description here"></a></p>
  
  <p>I have added the feature to cv2. connectedComponents to eliminate elements with a small number of pixels.</p>
  
  <p>Unfortunately, the algorithm is extremely slow for large images due to the extension. Is there a way to rewrite the extension to speed up the algorithm?</p>
  
  <pre><code>import cv2
  import numpy as np
  
  def zerolistmaker(n):
      listofzeros = [0] * n
      return listofzeros
  
  
  img = cv2.imread('files/motorway/gabor/eGaIy.jpg', 0)
  
  img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1]  # ensure binary
  retval, labels = cv2.connectedComponents(img)
  
  ##################################################
  # ENLARGEMENT
  ##################################################
  sorted_labels = labels.ravel()
  sorted_labels = np.sort(sorted_labels)
  
  
  maxPixel = 50  # eliminate elements with less than maxPixel
  
  # detect how often an element occurs
  i=0
  counter=0
  counterlist = zerolistmaker(retval)
  
  while i &lt; len(sorted_labels):
      if sorted_labels[i] == counter:
          counterlist[counter] = counterlist[counter] + 1
      else:
          counter = counter + 1
          i = i - 1
  
      i = i + 1
  
  
  # delete small pixel values
  i=0
  while i &lt; len(counterlist):
      if counterlist[i] &lt; maxPixel:
          counterlist[i] = 0
      i = i + 1
  
  i=0
  counterlisthelper = []
  while i &lt; len(counterlist):
      if counterlist[i] == 0:
          counterlisthelper.append(i)
      i = i + 1
  
  i=0
  j=0
  k=0
  while k &lt; len(counterlisthelper):
      while i &lt; labels.shape[0]:
          while j &lt; labels.shape[1]:
              if labels[i,j] == counterlisthelper[k]:
                  labels[i,j] = 0
              else:
                  labels[i,j] = labels[i,j]
              j = j + 1
          j = 0
          i = i + 1
      i = 0
      j = 0
      k = k + 1
  
  ##################################################
  ##################################################
  
  # Map component labels to hue val
  label_hue = np.uint8(179*labels/np.max(labels))
  blank_ch = 255*np.ones_like(label_hue)
  labeled_img = cv2.merge([label_hue, blank_ch, blank_ch])
  
  # cvt to BGR for display
  labeled_img = cv2.cvtColor(labeled_img, cv2.COLOR_HSV2BGR)
  
  # set bg label to black
  labeled_img[label_hue==0] = 0
  
  cv2.imshow('labeled.png', labeled_img)
  cv2.waitKey()
  </code></pre>