| | |
| |
|
| | """ |
| | 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) |
| |
|