123456789101112131415161718192021222324252627 |
- from collections import OrderedDict
- import cv2 as cv
- import numpy as np
- from .stitching_error import StitchingError
- class CameraEstimator:
- CAMERA_ESTIMATOR_CHOICES = OrderedDict()
- CAMERA_ESTIMATOR_CHOICES['homography'] = cv.detail_HomographyBasedEstimator
- CAMERA_ESTIMATOR_CHOICES['affine'] = cv.detail_AffineBasedEstimator
- DEFAULT_CAMERA_ESTIMATOR = list(CAMERA_ESTIMATOR_CHOICES.keys())[0]
- def __init__(self, estimator=DEFAULT_CAMERA_ESTIMATOR, **kwargs):
- self.estimator = CameraEstimator.CAMERA_ESTIMATOR_CHOICES[estimator](
- **kwargs
- )
- def estimate(self, features, pairwise_matches):
- b, cameras = self.estimator.apply(features, pairwise_matches, None)
- if not b:
- raise StitchingError("Homography estimation failed.")
- for cam in cameras:
- cam.R = cam.R.astype(np.float32)
- return cameras
|