megapix_scaler.py 991 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import numpy as np
  2. class MegapixScaler:
  3. def __init__(self, megapix):
  4. self.megapix = megapix
  5. self.is_scale_set = False
  6. self.scale = None
  7. def set_scale_by_img_size(self, img_size):
  8. self.set_scale(
  9. self.get_scale_by_resolution(img_size[0] * img_size[1])
  10. )
  11. def set_scale(self, scale):
  12. self.scale = scale
  13. self.is_scale_set = True
  14. def get_scale_by_resolution(self, resolution):
  15. if self.megapix > 0:
  16. return np.sqrt(self.megapix * 1e6 / resolution)
  17. return 1.0
  18. def get_scaled_img_size(self, img_size):
  19. width = int(round(img_size[0] * self.scale))
  20. height = int(round(img_size[1] * self.scale))
  21. return (width, height)
  22. class MegapixDownscaler(MegapixScaler):
  23. @staticmethod
  24. def force_downscale(scale):
  25. return min(1.0, scale)
  26. def set_scale(self, scale):
  27. scale = self.force_downscale(scale)
  28. super().set_scale(scale)