ClassesColorMapping

Introduction

Classes Color Mapping widget allows users to edit class colors on the fly. This widget can be used when you have classes with similar colors and you want to change them to be more distinguishable.

Function signature

classes_color_mapping = ClassesColorMapping(
    classes=obj_classes,
    grayscale=False,
    widget_id=None
)

Parameters

ParametersTypeDescription

classes

Union[List[ObjClass], ObjClassCollection]

Supervisely object class collection or list of object classes

grayscale

bool

If True convert selected RGB color to grayscale

widget_id

str

ID of the widget

classes

List of ObjClass objects or Supervisely object class collection (ObjClassCollection).

type: Union[List[ObjClass], ObjClassCollection]

classes_color_mapping = ClassesColorMapping(
    classes=obj_classes,
)

grayscale

If True convert selected RGB color value to grayscale.

type: bool

default False

classes_color_mapping = ClassesColorMapping(
    classes=obj_classes,
    grayscale=True
)

widget_id

ID of the widget.

type: str

default value: None

Methods and attributes

Attributes and MethodsDescription

set()

Set classes to widget.

set_colors()

Set classes colors.

get_classes()

Get all classes.

get_selected_classes_original()

Get classes with original colors.

get_selected_classes_edited()

Get classes with selected colors.

get_mapping()

Get class to color map.

set_default()

Set multiple flag.

select()

Return list of all classes.

Mini App Example

You can find this example in our Github repository:

supervisely-ecosystem/ui-widgets-demos/input/010_classes_color_mapping/src/main.py

Import libraries

import os
import supervisely as sly
from supervisely.app.widgets import (
    Card,
    Container,
    ClassesColorMapping,
    ClassesListPreview,
    Button,
    Text,
)
from dotenv import load_dotenv

Init API client

First, we load environment variables with credentials and init API for communicating with Supervisely Instance:

load_dotenv("local.env")
load_dotenv(os.path.expanduser("~/supervisely.env"))

api = sly.Api()

Create list of object classes and init ClassesColorMapping widget

cat_obj_class = sly.ObjClass("cat", sly.Rectangle, color=[255, 0, 0])
dog_obj_class = sly.ObjClass("dog", sly.Polygon, color=[0, 255, 0])
horse_obj_class = sly.ObjClass("horse", sly.Bitmap, color=[0, 0, 255])
cow_obj_class = sly.ObjClass("cow", sly.Polyline, color=[255, 255, 0])
zebra_obj_class = sly.ObjClass("zebra", sly.Point, color=[255, 0, 255])
obj_classes = [
    cat_obj_class,
    dog_obj_class,
    horse_obj_class,
    cow_obj_class,
    zebra_obj_class,
]

classes_color_mapping = ClassesColorMapping(obj_classes)

Initialize ClassesListPreview widget to display changes and Button widget to save changes

classes_list_preview = ClassesListPreview()
new_classes_names = Text(f"Press button to save changes", "info")
save_button = Button("Save", button_size="mini")

Create app layout

Prepare a layout for app using Card widget with the content parameter and place widget that we've just created into the Container widget.

container = Container([classes_color_mapping, new_classes_names, save_button, classes_list_preview])

card = Card(
    title="Classes Color Mapping",
    content=container,
)

layout = Container(widgets=[card])

Create app using layout

Create an app object with layout parameter.

app = sly.Application(layout=layout)

Add functions to control widgets from python code

@save_button.click
def save_changes():
    new_classes = classes_color_mapping.get_selected_classes_edited()
    classes_list_preview.set(new_classes)

Last updated