|
|
|
|
| """
|
| An awesome colormap for really neat visualizations.
|
| Copied from Detectron, and removed gray colors.
|
| """
|
|
|
| import numpy as np
|
| import random
|
|
|
| __all__ = ["colormap", "random_color", "random_colors"]
|
|
|
|
|
|
|
| _COLORS = np.array(
|
| [
|
| 0.000, 0.447, 0.741,
|
| 0.850, 0.325, 0.098,
|
| 0.929, 0.694, 0.125,
|
| 0.494, 0.184, 0.556,
|
| 0.466, 0.674, 0.188,
|
| 0.301, 0.745, 0.933,
|
| 0.635, 0.078, 0.184,
|
| 0.300, 0.300, 0.300,
|
| 0.600, 0.600, 0.600,
|
| 1.000, 0.000, 0.000,
|
| 1.000, 0.500, 0.000,
|
| 0.749, 0.749, 0.000,
|
| 0.000, 1.000, 0.000,
|
| 0.000, 0.000, 1.000,
|
| 0.667, 0.000, 1.000,
|
| 0.333, 0.333, 0.000,
|
| 0.333, 0.667, 0.000,
|
| 0.333, 1.000, 0.000,
|
| 0.667, 0.333, 0.000,
|
| 0.667, 0.667, 0.000,
|
| 0.667, 1.000, 0.000,
|
| 1.000, 0.333, 0.000,
|
| 1.000, 0.667, 0.000,
|
| 1.000, 1.000, 0.000,
|
| 0.000, 0.333, 0.500,
|
| 0.000, 0.667, 0.500,
|
| 0.000, 1.000, 0.500,
|
| 0.333, 0.000, 0.500,
|
| 0.333, 0.333, 0.500,
|
| 0.333, 0.667, 0.500,
|
| 0.333, 1.000, 0.500,
|
| 0.667, 0.000, 0.500,
|
| 0.667, 0.333, 0.500,
|
| 0.667, 0.667, 0.500,
|
| 0.667, 1.000, 0.500,
|
| 1.000, 0.000, 0.500,
|
| 1.000, 0.333, 0.500,
|
| 1.000, 0.667, 0.500,
|
| 1.000, 1.000, 0.500,
|
| 0.000, 0.333, 1.000,
|
| 0.000, 0.667, 1.000,
|
| 0.000, 1.000, 1.000,
|
| 0.333, 0.000, 1.000,
|
| 0.333, 0.333, 1.000,
|
| 0.333, 0.667, 1.000,
|
| 0.333, 1.000, 1.000,
|
| 0.667, 0.000, 1.000,
|
| 0.667, 0.333, 1.000,
|
| 0.667, 0.667, 1.000,
|
| 0.667, 1.000, 1.000,
|
| 1.000, 0.000, 1.000,
|
| 1.000, 0.333, 1.000,
|
| 1.000, 0.667, 1.000,
|
| 0.333, 0.000, 0.000,
|
| 0.500, 0.000, 0.000,
|
| 0.667, 0.000, 0.000,
|
| 0.833, 0.000, 0.000,
|
| 1.000, 0.000, 0.000,
|
| 0.000, 0.167, 0.000,
|
| 0.000, 0.333, 0.000,
|
| 0.000, 0.500, 0.000,
|
| 0.000, 0.667, 0.000,
|
| 0.000, 0.833, 0.000,
|
| 0.000, 1.000, 0.000,
|
| 0.000, 0.000, 0.167,
|
| 0.000, 0.000, 0.333,
|
| 0.000, 0.000, 0.500,
|
| 0.000, 0.000, 0.667,
|
| 0.000, 0.000, 0.833,
|
| 0.000, 0.000, 1.000,
|
| 0.000, 0.000, 0.000,
|
| 0.143, 0.143, 0.143,
|
| 0.857, 0.857, 0.857,
|
| 1.000, 1.000, 1.000
|
| ]
|
| ).astype(np.float32).reshape(-1, 3)
|
|
|
|
|
|
|
| def colormap(rgb=False, maximum=255):
|
| """
|
| Args:
|
| rgb (bool): whether to return RGB colors or BGR colors.
|
| maximum (int): either 255 or 1
|
|
|
| Returns:
|
| ndarray: a float32 array of Nx3 colors, in range [0, 255] or [0, 1]
|
| """
|
| assert maximum in [255, 1], maximum
|
| c = _COLORS * maximum
|
| if not rgb:
|
| c = c[:, ::-1]
|
| return c
|
|
|
|
|
| def random_color(rgb=False, maximum=255):
|
| """
|
| Args:
|
| rgb (bool): whether to return RGB colors or BGR colors.
|
| maximum (int): either 255 or 1
|
|
|
| Returns:
|
| ndarray: a vector of 3 numbers
|
| """
|
| idx = np.random.randint(0, len(_COLORS))
|
| ret = _COLORS[idx] * maximum
|
| if not rgb:
|
| ret = ret[::-1]
|
| return ret
|
|
|
|
|
| def random_colors(N, rgb=False, maximum=255):
|
| """
|
| Args:
|
| N (int): number of unique colors needed
|
| rgb (bool): whether to return RGB colors or BGR colors.
|
| maximum (int): either 255 or 1
|
|
|
| Returns:
|
| ndarray: a list of random_color
|
| """
|
| indices = random.sample(range(len(_COLORS)), N)
|
| ret = [_COLORS[i] * maximum for i in indices]
|
| if not rgb:
|
| ret = [x[::-1] for x in ret]
|
| return ret
|
|
|
|
|
| if __name__ == "__main__":
|
| import cv2
|
|
|
| size = 100
|
| H, W = 10, 10
|
| canvas = np.random.rand(H * size, W * size, 3).astype("float32")
|
| for h in range(H):
|
| for w in range(W):
|
| idx = h * W + w
|
| if idx >= len(_COLORS):
|
| break
|
| canvas[h * size : (h + 1) * size, w * size : (w + 1) * size] = _COLORS[idx]
|
| cv2.imshow("a", canvas)
|
| cv2.waitKey(0)
|
|
|