class_docstr: Estimator of the motion of the camera.
  
  Uses optical flow to estimate the motion of the camera from frame to frame.
  The optical flow is calculated on a sample of strong points (corners).
  
  Parameters
  ----------
  max_points : int, optional
      Maximum amount of points sampled.
      More points make the estimation process slower but more precise
  min_distance : int, optional
      Minimum distance between the sample points.
  block_size : int, optional
      Size of an average block when finding the corners. More info in links below.
  transformations_getter : TransformationGetter, optional
      An instance of TransformationGetter. By default [`HomographyTransformationGetter`][norfair.camera_motion.HomographyTransformationGetter]
  draw_flow : bool, optional
      Draws the optical flow on the frame for debugging.
  flow_color : Optional[Tuple[int, int, int]], optional
      Color of the drawing, by default blue.
  quality_level : float, optional
      Parameter characterizing the minimal accepted quality of image corners.
  
  Examples
  --------
  >>> from norfair import Tracker, Video
  >>> from norfair.camera_motion MotionEstimator
  >>> video = Video("video.mp4")
  >>> tracker = Tracker(...)
  >>> motion_estimator = MotionEstimator()
  >>> for frame in video:
  >>>    detections = get_detections(frame)  # runs detector and returns Detections
  >>>    coord_transformation = motion_estimator.update(frame)
  >>>    tracked_objects = tracker.update(detections, coord_transformations=coord_transformation)
  
  See Also
  --------
  For more infor on how the points are sampled: [OpenCV.goodFeaturesToTrack](https://docs.opencv.org/3.4/dd/d1a/group__imgproc__feature.html#ga1d6bb77486c8f92d79c8793ad995d541)
code: def __init__(
      self,
      max_points: int = 200,
      min_distance: int = 15,
      block_size: int = 3,
      transformations_getter: TransformationGetter = None,
      draw_flow: bool = False,
      flow_color: Optional[Tuple[int, int, int]] = None,
      quality_level: float = 0.01,
  ):
      self.max_points = max_points
      self.min_distance = min_distance
      self.block_size = block_size
  
      self.draw_flow = draw_flow
      if self.draw_flow and flow_color is None:
          flow_color = [0, 0, 100]
      self.flow_color = flow_color
  
      self.gray_prvs = None
      self.prev_pts = None
      if transformations_getter is None:
          transformations_getter = HomographyTransformationGetter()
  
      self.transformations_getter = transformations_getter
      self.prev_mask = None
      self.gray_next = None
      self.quality_level = quality_level
  
imports: from abc import ABC, abstractmethod
  from typing import Optional, Tuple
  import numpy
label_desc: Use image node_id 1 to create a new MotionEstimator object  with example: obj = MotionEstimator(max_points, min_distance, block_size, transformations_getter, draw_flow, flow_color, quality_level)