68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
|
import numpy as np
|
||
|
|
||
|
from .base import Plugin
|
||
|
from ..widgets import ComboBox, Slider
|
||
|
from ..canvastools import PaintTool
|
||
|
|
||
|
|
||
|
__all__ = ['LabelPainter']
|
||
|
|
||
|
|
||
|
rad2deg = 180 / np.pi
|
||
|
|
||
|
|
||
|
class LabelPainter(Plugin):
|
||
|
name = 'LabelPainter'
|
||
|
|
||
|
def __init__(self, max_radius=20, **kwargs):
|
||
|
super(LabelPainter, self).__init__(**kwargs)
|
||
|
|
||
|
# These widgets adjust plugin properties instead of an image filter.
|
||
|
self._radius_widget = Slider('radius', low=1, high=max_radius,
|
||
|
value=5, value_type='int', ptype='plugin')
|
||
|
labels = [str(i) for i in range(6)]
|
||
|
labels[0] = 'Erase'
|
||
|
self._label_widget = ComboBox('label', labels, ptype='plugin')
|
||
|
self.add_widget(self._radius_widget)
|
||
|
self.add_widget(self._label_widget)
|
||
|
|
||
|
print(self.help())
|
||
|
|
||
|
def help(self):
|
||
|
helpstr = ("Label painter",
|
||
|
"Hold left-mouse button and paint on canvas.")
|
||
|
return '\n'.join(helpstr)
|
||
|
|
||
|
def attach(self, image_viewer):
|
||
|
super(LabelPainter, self).attach(image_viewer)
|
||
|
|
||
|
image = image_viewer.original_image
|
||
|
self.paint_tool = PaintTool(image_viewer, image.shape,
|
||
|
on_enter=self.on_enter)
|
||
|
self.paint_tool.radius = self.radius
|
||
|
self.paint_tool.label = self._label_widget.index = 1
|
||
|
self.artists.append(self.paint_tool)
|
||
|
|
||
|
def _on_new_image(self, image):
|
||
|
"""Update plugin for new images."""
|
||
|
self.paint_tool.shape = image.shape
|
||
|
|
||
|
def on_enter(self, overlay):
|
||
|
pass
|
||
|
|
||
|
@property
|
||
|
def radius(self):
|
||
|
return self._radius_widget.val
|
||
|
|
||
|
@radius.setter
|
||
|
def radius(self, val):
|
||
|
self.paint_tool.radius = val
|
||
|
|
||
|
@property
|
||
|
def label(self):
|
||
|
return self._label_widget.val
|
||
|
|
||
|
@label.setter
|
||
|
def label(self, val):
|
||
|
self.paint_tool.label = val
|