Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23390

How to make rectangular images using Matplotlib as some functions are not recognized?

$
0
0

I'm trying to make rectangular annotations on images, but I'm unable to put annotation as I'm running into attribute errors as some modules are not recognized, the file directory has images in .jpeg, and I want to make a interface on Jupyter notebook to make selection on images or you can say rectangular annotations.

The code is:

import matplotlib.pyplot as pltimport matplotlib.patches as patchesfrom PIL import Imagefrom IPython.display import display, clear_outputimport ipywidgets as widgetsimport osclass ImageAnnotator:    def _init_(self):        self.image_dir = "C:\\\\annotated_images"        self.images = []        self.current_index = 0        self.rect_coords = []        self.rect_active = False        self.fig, self.ax = plt.subplots()        self.ax.axis('off')        self.canvas = self.fig.canvas        self.load_button = widgets.Button(description="Load Images")        self.load_button.on_click(self.load_images)        self.prev_button = widgets.Button(description="Previous (P)")        self.prev_button.on_click(self.previous_image)        self.next_button = widgets.Button(description="Next (N)")        self.next_button.on_click(self.next_image)        self.redo_button = widgets.Button(description="Redo (R)")        self.redo_button.on_click(self.redo_annotation)        self.enable_annotation_button = widgets.Button(description="Enable Annotation")        self.enable_annotation_button.on_click(self.enable_annotation)        self.file_path_entry = widgets.Text(value=self.image_dir, description="File Path:", disabled=True)        self.output = widgets.Output()        self.display_widgets()    def display_widgets(self):        display(self.file_path_entry)        display(self.load_button)        display(widgets.HBox([self.prev_button, self.next_button, self.redo_button]))        display(self.enable_annotation_button)        display(self.output)    def load_images(self, _):        self.images = [file for file in os.listdir(self.image_dir) if file.endswith('.jpg') or file.endswith('.jpeg')]        if self.images:            self.current_index = 0            self.show_image()    def show_image(self):        image_path = os.path.join(self.image_dir, self.images[self.current_index])        self.file_path_entry.value = image_path        self.image = Image.open(image_path)        self.ax.clear()        self.ax.imshow(self.image)        self.canvas.draw()    def previous_image(self, _):        if self.current_index > 0:            self.current_index -= 1            self.show_image()    def next_image(self, _):        if self.current_index < len(self.images) - 1:            self.current_index += 1            self.show_image()    def redo_annotation(self, _):        self.rect_coords = []        self.rect_active = False        self.ax.clear()        self.ax.imshow(self.image)        self.canvas.draw()    def enable_annotation(self, _):        self.rect_coords = []        self.rect_active = True    def on_canvas_click(self, event):        if not self.rect_active:            return        x, y = event.xdata, event.ydata        self.rect_coords.append((x, y))        if len(self.rect_coords) == 2:            self.draw_rectangle()    def draw_rectangle(self):        x1, y1 = self.rect_coords[0]        x2, y2 = self.rect_coords[1]        width = abs(x2 - x1)        height = abs(y2 - y1)        rect = patches.Rectangle((x1, y1), width, height, linewidth=2, edgecolor='r', facecolor='none')        self.ax.add_patch(rect)        self.rect_coords = []        self.rect_active = False        self.canvas.draw()# Instantiate and display the ImageAnnotatorannotator = ImageAnnotator()annotator.canvas.mpl_connect('button_press_event', annotator.on_canvas_click)display(annotator.fig.canvas)

I wanted an interactive rectangular annotator, but I'm running into loads of errors


Viewing all articles
Browse latest Browse all 23390

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>