title: Contour matchshapes in openCV
body: <p>I am new to openCV(with Python) and image processing and tried to start a project of my own to learn how things work. I'm trying to select the teeth from an image of an open mouth. The best solution that I could think of is to match it with a template of a tooth and try to matchshapes based on the contours that I get from the mouth image. This might not be the best solution, but it does seem rather easy.</p>
  
  <p>So far, my code looks like this:</p>
  
  <pre><code>img = cv2.imread('resources/1.jpg', cv2.IMREAD_COLOR)
  compare = cv2.imread('resources/template.jpg', cv2.IMREAD_GRAYSCALE)
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  gray = cv2.bilateralFilter(gray, 11, 17, 17)
  edges = cv2.Canny(gray, 20, 10)
  compare = cv2.Canny(compare, 200, 200)
  
  contours, _ = cv2.findContours(gray.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  compare_contours, _2 = cv2.findContours(compare.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
  
  for c in contours:
      for c2 in compare_contours:
          ret = cv2.matchShapes(c, c2, 1, 0.0)
          if ret &lt; 0.5:
              peri = cv2.arcLength(c, True)
              approx = cv2.approxPolyDP(c, 0.02 * peri, True)
              cv2.drawContours(img, [approx], -1, (0, 255, 0), 7)
  </code></pre>
  
  <p>img is the image of the mouth and compare is a tooth from the same image that I selected with photoshop, so I do expect to match at least that one. My current problem is that the only contour that matches seems to be the frame of the image.</p>
  
  <p>Can someone please point out what am I doing wrong or suggest me a better approach of the project? Does the image size have something to do with the image size and if so, what is the best way to resize images?</p>
  
  <p>Thank you for your time! </p>