title: How to improve edge detection and remove background from an image?
body: <p>I am using the code below to remove the backroung of the images and highlight only my region of interest (ROI), however, the algorithm behaves in a wrong way in some images, discarding the stain (ROI) and deleting along with the background.</p>
  
  <pre><code>import numpy as np
  import cv2
  
  #Read the image and perform threshold
  img = cv2.imread('photo.bmp')
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  blur = cv2.medianBlur(gray,5)
  _,thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
  
  #Search for contours and select the biggest one
  contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
  cnt = max(contours, key=cv2.contourArea)
  
  #Create a new mask for the result image
  h, w = img.shape[:2]
  mask = np.zeros((h, w), np.uint8)
  
  #Draw the contour on the new mask and perform the bitwise operation
  cv2.drawContours(mask, [cnt],-1, 255, -1)
  res = cv2.bitwise_and(img, img, mask=mask)
  
  #Display the result
  cv2.imwrite('photo.png', res)
  #cv2.imshow('img', res)
  cv2.waitKey(0)
  cv2.destroyAllWindows()
  </code></pre>