Sagar Bharadwaj
Added live updates for font size and thicness.
b3d91b5
from colorbynumber.config import default_config
from colorbynumber.main import ColorByNumber
from colorbynumber.numbered_islands import add_numbers_to_image
def _hex_to_rgb(hex_color):
hex_color = hex_color.lstrip("#")
return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
def get_color_by_number(image_path, number_of_colors,
is_automatic_colors, num_colors,
denoise_flag, denoise_order, denoise_type,
blur_size, denoise_h,
open_kernel_size, area_perc_threshold,
check_shape_validity, arc_length_area_ratio_threshold,
font_size, font_color, font_thickness,
*color_list):
# Convert each color to r,g,b tuple
color_list = color_list[:num_colors]
color_list = [_hex_to_rgb(h) for h in color_list]
# Update config
config = default_config.copy()
config["denoise"] = denoise_flag
config["denoise_order"] = denoise_order
config["denoise_type"] = denoise_type
config["blur_size"] = blur_size
config["denoise_h"] = denoise_h
config["open_kernel_size"] = open_kernel_size
config["area_perc_threshold"] = area_perc_threshold
config["check_shape_validity"] = check_shape_validity
config["arc_length_area_ratio_threshold"] = arc_length_area_ratio_threshold
config["font_size"] = font_size
config["font_color"] = _hex_to_rgb(font_color)
config["font_thickness"] = font_thickness
if is_automatic_colors:
colorbynumber_obj = ColorByNumber(
image_path = image_path,
num_colors = number_of_colors,
config = config,
)
else:
colorbynumber_obj = ColorByNumber(
image_path = image_path,
color_list = color_list,
config = config,
)
numbered_islands = colorbynumber_obj.create_color_by_number()
data = {
"centroid_coords_list": colorbynumber_obj.centroid_coords_list,
"color_id_list": [color_id for color_id, _ in colorbynumber_obj.island_borders_list]
}
return numbered_islands, \
colorbynumber_obj.generate_color_legend(), \
colorbynumber_obj.simplified_image, \
colorbynumber_obj.islands_image, \
data
def change_font_on_image(image, data, font_size, font_color, font_thickness):
if image is None:
return None
centroid_coords_list = data["centroid_coords_list"]
color_id_list = data["color_id_list"]
font_color = _hex_to_rgb(font_color)
return add_numbers_to_image(
image = image,
centroid_coords_list = centroid_coords_list,
color_id_list = color_id_list,
font_size = font_size,
font_color = font_color,
font_thickness = font_thickness
)