title: Live Heatmap generation in OpenCV python
body: <p>I want to generate heatmap while the video is playing basically i want to show the crowd density. I have no idea how to do this i am doing this now it calculates the heatmap after processing the whole video i just want to make it live , like video is playing and color is spreading over different places.</p>
  
  <pre><code>import numpy as np
  import cv2
  
  
  class Motion:
   def __init__(self):
      print("Motion Detection Object Created")
      # input file name of video
      self.inname = 'data.mp4'
  
      # file name to save
      self.outname = "C:/Heatmap"
  
  
   def prep(self):
  
      # just read the first frame to get height and width
      cap = cv2.VideoCapture(self.inname)
  
      ret, self.orig_image = cap.read()
      width = np.size(self.orig_image, 1)
      height = np.size(self.orig_image, 0)
      frame_size = (height, width)
  
      # make accumulator image of the same size
      self.accumulator = np.zeros((height, width), np.float32)  # 32 bit accumulator
  
   def run(self):
      cap = cv2.VideoCapture(self.inname)
      fgbg = cv2.createBackgroundSubtractorMOG2(varThreshold=1000, detectShadows=True)
      #print(fgbg[0])
  
      while (1):
          ret, frame = cap.read()
          #print(frame)
  
          if not ret:
              break
          fgmask = fgbg.apply(frame)
          self.accumulator = self.accumulator + fgmask
  
  def write(self):
  
      self.ab = cv2.convertScaleAbs(255 - np.array(self.accumulator, 'uint8'))
  
      # only get reasonable high values, above mean
      ret, self.acc_thresh = cv2.threshold(self.ab, self.ab.mean(), 255, cv2.THRESH_TOZERO)
  
      # make a color map
      acc_col = cv2.applyColorMap(self.acc_thresh, cv2.COLORMAP_RAINBOW)
  
      cv2.imwrite(str(self.outname + "/heatmap.jpg"), acc_col)
  
      # add to original frame
      backg = cv2.addWeighted(np.array(acc_col, "uint8"), 0.45, self.orig_image, 0.55, 0)
  
      cv2.imwrite(str(self.outname + "/heatmap_background.jpg"), backg)
  
  
     # MAIN ENTRY POINT
  
  
    if __name__ == "__main__":
      motionVid = Motion()
      motionVid.prep()
      motionVid.run()
      motionVid.write()
  </code></pre>