title: Detect different color blob opencv
body: <p>I'm new to opencv and for a school project i need to detect a red and a green circle with a camera, so i've use blobdetection, but it detect me the two colors, i think that my mask is bad, each color is linked to a specific action. </p>
  
  <p>At the moment my code detect well red and green circle on the same page but i want it to detect  only red circle on a white page.</p>
  
  <p>Thank for your help</p>
  
  <pre><code># Standard imports
  import cv2
  import numpy as np;
  
      # Read image
  im = cv2.VideoCapture(0)
  
  # Setup SimpleBlobDetector parameters.
  params = cv2.SimpleBlobDetector_Params()
  
  # Change thresholds
  params.minThreshold = 100;
  params.maxThreshold = 200;
  
  # Filter by Area.
  params.filterByArea = True
  params.minArea = 200
  params.maxArea = 20000
  
  # Filter by Circularity
  params.filterByCircularity = True
  params.minCircularity = 0.1
  
  # Filter by Convexity
  params.filterByConvexity = True
  params.minConvexity = 0.1
  
  # Filter by Inertia
  params.filterByInertia = True
  params.minInertiaRatio = 0.1
  
  
  blueLower = (0,85,170)  #100,130,50
  blueUpper = (140,110,255) #200,200,130
  
  
  while(1):
  
      ret, frame=im.read()
  
      mask = cv2.inRange(frame, blueLower, blueUpper)
      mask = cv2.erode(mask, None, iterations=0)
      mask = cv2.dilate(mask, None, iterations=0)
      frame = cv2.bitwise_and(frame,frame,mask = mask)
  
  # Set up the detector with default parameters.
      detector = cv2.SimpleBlobDetector_create(params)
  
  # Detect blobs.
      keypoints = detector.detect(mask)
  
  # Draw detected blobs as red circles.
  # cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
      im_with_keypoints = cv2.drawKeypoints(mask, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
  
  
  # Display the resulting frame
  
      frame = cv2.bitwise_and(frame,im_with_keypoints,mask = mask)
  
      cv2.imshow('frame',frame)
  
      if cv2.waitKey(1) &amp; 0xFF == ord('q'):
          break
  
  # When everything done, release the capture
  im.release()
  cv2.destroyAllWindows()
  </code></pre>
  
  <p><strong>EDIT 1:</strong> Code update</p>
  
  <p>Now i got a issue where my full circle isn't detected.</p>
  
  <p><a href="https://i.stack.imgur.com/IMxdt.png" rel="nofollow noreferrer">No Blob Detection</a></p>
  
  <h1>Second Version</h1>
  
  <pre><code># Standard imports
  import cv2
  import numpy as np;
  
  # Read image
  im = cv2.VideoCapture(0)
  
  while(1):
          ret, frame=im.read()
  
  
          lower = (130,150,80)  #130,150,80
          upper = (250,250,120) #250,250,120
          mask = cv2.inRange(frame, lower, upper)
          lower, contours, upper = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
          blob = max(contours, key=lambda el: cv2.contourArea(el))
          M = cv2.moments(blob)
          center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
          canvas = im.copy()
          cv2.circle(canvas, center, 2, (0,0,255), -1)
  
          cv2.imshow('frame',frame)
  
          if cv2.waitKey(1) &amp; 0xFF == ord('q'):
                  break
  im.release()
  cv2.destroyAllWindows()
  </code></pre>