Source code for controllers.control_image_original

"""
This module contains the ControlImageOriginal class, which provides methods for creating and displaying
original images in a user interface, along with applying optional modifications based on different view
modes and checkbox states. It facilitates functionalities such as adding crosshairs, drawing polygons,
and displaying recentered images based on user interactions.
"""


[docs] class ControlImageOriginal: """ This class provides methods for creating and displaying original images in a user interface, along with applying optional modifications based on different view modes and checkbox states. It facilitates functionalities such as adding crosshairs, drawing polygons, and displaying recentered images based on user interactions. Attributes: _controller: The controller object responsible for managing the application flow. _model: The model object containing application data and logic. _main_config: Configuration settings for the main application. _icx: X-coordinate of the image center. _icy: Y-coordinate of the image center. _ui_object: User interface object containing UI elements. Methods: create_image_original(): Creates and displays the original image in the user interface with optional modifications. _get_image_for_original(): Retrieves the image for the original view. _apply_recenter_view(image): Applies recenter view modifications to the image. _apply_normal_image(image): Applies normal view modifications to the image. _state_fisheye_view(image): Applies modifications for fisheye view. _state_anypoint_view(image): Applies modifications for anypoint view. _state_panorama_view(image): Applies modifications for panorama view. _display_image_in_label_original(image): Displays the image in the original label with optional modifications. """ def __init__(self, controller): self._controller = controller self._model = controller.model self._main_config = controller.model.main_config self._icx = None self._icy = None self._ui_object = controller.ui_object
[docs] def create_image_original(self): """ Create and display the original image in the user interface, with optional modifications. Modifies the original image based on the view mode and checkbox states, such as adding a crosshair or drawing polygons. If 'Reverse View' is checked, additional adjustments are made, including displaying a recentered image and drawing polygons for specific view modes. Return: None """ try: if self._model.debug_mode: self._model.activity_logger.info( "ControlImageOriginal.create_image_original(): Create image original and show to UI") image = self._get_image_for_original() if self._model.recenter_mode_view: self._apply_recenter_view(image) else: self._apply_normal_image(image) except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal.create_image_original(): {str(e)}")
[docs] def _get_image_for_original(self): """ Get the image for the original view. Return: numpy.ndarray: The image for the original view. """ try: x, y = self._main_config["Image_original"]["pointer"] image = self._model.process_image_ori() if x is not None and y is not None: image = self._model.point(image, (x, y)) return image except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal._get_image_for_original(): {str(e)}")
[docs] def _apply_recenter_view(self, image): """ Apply recenter view modifications to the image. Arg: image: The original image. Return: None """ try: image = self._model.crosshair(image, (self._main_config["Image_recenter"]["Recenter_coordinate"])) x, y = self._main_config["Image_recenter"]["pointer"] if x is not None and y is not None: image_rec = self._model.point(self._model.image_recenter.copy(), (x, y)) else: image_rec = self._model.image_recenter.copy() if self._model.mode_view == "FisheyeView": image_rec = self._model.crosshair(image_rec, (self._main_config["Image_original"]["center_coord"])) elif self._model.mode_view == "AnypointView": image_rec = self._state_anypoint_view(image_rec) elif self._model.mode_view == "PanoramaView": image_rec = self._state_panorama_view(image_rec) else: image_rec = self._model.image_recenter.copy() self._model.show_image_to_label(self._ui_object.label_image_recenter, image_rec, 304) self._display_image_in_label_original(image) except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal._apply_recenter_view(): {str(e)}")
[docs] def _apply_normal_image(self, image): """ Apply normal view modifications to the image. Arg: image: The original image. Return: None """ try: if self._model.mode_view == "FisheyeView": self._state_fisheye_view(image) elif self._model.mode_view == "AnypointView": image = self._state_anypoint_view(image) elif self._model.mode_view == "PanoramaView": image = self._state_panorama_view(image) self._display_image_in_label_original(image) except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal._apply_normal_image(): {str(e)}")
[docs] def _state_fisheye_view(self, image): """ Apply modifications for fisheye view. Arg: image: The original image. Return: numpy.ndarray: The modified image. """ try: if self._model.source_usable: self._icx, self._icy = self._main_config["Image_original"]["center_coord"] image = self._model.crosshair(image, (self._icx, self._icy)) else: if self._icx is None and self._icy is None: height, width, _ = image.shape self._icx = width // 2 self._icy = height // 2 self._main_config["Image_original"]["center_coord"] = self._icx, self._icy image = self._model.crosshair(image, (self._icx, self._icy)) return image except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal._state_fisheye_view(): {str(e)}")
[docs] def _state_anypoint_view(self, image): """ Apply modifications for anypoint view. Arg: image: The original image. Return: numpy.ndarray: The modified image. """ try: if self._controller.ui_object.radio_mode_1.isChecked(): image = self._model.crosshair(image, (self._main_config["Mode_1"]["coord"])) else: image = self._model.crosshair(image, (self._main_config["Mode_2"]["coord"])) if self._ui_object.check_draw_poligon.isChecked(): maps_x, maps_y = self._model.view_anypoint.maps_anypoint image = self._model.draw_polygon(image, maps_x, maps_y) return image except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal._state_anypoint_view(): {str(e)}")
[docs] def _state_panorama_view(self, image): """ Apply modifications for panorama view. Arg: image: The original image. Return: numpy.ndarray: The modified image. """ try: if self._ui_object.radioButton_car.isChecked(): image = self._model.crosshair(image, (self._main_config["Pano_car"]["coord"])) else: image = self._model.crosshair(image, (self._main_config["Image_original"]["center_coord"])) if self._ui_object.check_draw_poligon_pano.isChecked(): maps_x, maps_y = self._model.view_panorama.maps_panorama image = self._model.draw_polygon(image, maps_x, maps_y) return image except Exception as e: self._model.activity_logger.error(f"Error in ControlImageOriginal._state_panorama_view(): {str(e)}")
[docs] def _display_image_in_label_original(self, image): """ Display the image in the original label with optional modifications. Arg: image: The image to display. Return: None """ try: if self._model.view_zoom_area.state_rubberband: if self._model.mode_view == "AnypointView": image = self._model.view_anypoint.image_anypoint(image) elif self._model.mode_view == "PanoramaView": image = self._model.view_panorama.panorama_image(image) image = self._model.draw_rectangle(image, self._model.view_zoom_area.point_rectangle[0], self._model.view_zoom_area.point_rectangle[1]) self._model.show_image_to_label(self._ui_object.label_image_original, image, 320) except Exception as e: self._model.activity_logger.error( f"Error in ControlImageOriginal._display_image_in_label_original(): {str(e)}")