title: Opencv detect changes between two photos taken by different time
body: <p>We have one original image / photo of the item. (ie sculpture).</p>
  
  <p>Time to time we are taking new photos of the item. Photo always taken same angle 90 degree to the item. but </p>
  
  <ul>
  <li>there will be some slightly movement up down / left right there will
  be different length of the same object ( we are taking with line
  camera and the object moving in front of it so time to time speed of
  the object changing so the final image will be longer than the
  original)</li>
  </ul>
  
  <p>Also lighting changes so colour and lightning also not same always.
  Time to time there will be a mud, different small objects on the item. </p>
  
  <p>I would love to your suggestions and solutions to detect and mark the different part of the object on the new picture with opencv.</p>
  
  <p>We tried resemblejs but it shows all parts changed due to colour, length etc differences. But object is same</p>
  
  <p>Thx</p>
  
  <p>code : </p>
  
  <pre><code>from skimage.measure import compare_ssim
  import argparse
  import imutils
  import cv2
  import numpy as np
  
  
  ap = argparse.ArgumentParser()
  ap.add_argument("-f", "--first", required=True,
      help="first input image")
  ap.add_argument("-s", "--second", required=True,
      help="second")
  args = vars(ap.parse_args())
  
  imageA = cv2.imread(args["first"])
  imageB = cv2.imread(args["second"])
  
  grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)
  grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)
  
  
  (score, diff) = compare_ssim(grayA, grayB, full=True)
  diff = (diff * 55).astype("uint8")
  print("SSIM: {}".format(score))
  
  thresh = cv2.threshold(diff, 0, 255,
      cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
  cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
      cv2.CHAIN_APPROX_SIMPLE)
  cnts = cnts[0] if imutils.is_cv2() else cnts[1]
  
  for c in cnts:
      (x, y, w, h) = cv2.boundingRect(c)
      cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)
      cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)
  
  cv2.imshow("Diff", diff)
  cv2.waitKey(0)
  </code></pre>
  
  <p><strong>Edit 1</strong></p>
  
  <p><a href="https://drive.google.com/drive/folders/0By_QG_ODrMu3aXJicXJmRGhPM0U" rel="nofollow noreferrer">Link</a> to test images</p>