kwimage.im_color module¶
- class kwimage.im_color.Color(color, alpha=None, space=None)[source]¶
Bases:
NiceRepr
Used for converting a single color between spaces and encodings. This should only be used when handling small numbers of colors(e.g. 1), don’t use this to represent an image.
- Parameters
space (str) – colorspace of wrapped color. Assume RGB if not specified and it cannot be inferred
CommandLine
xdoctest -m ~/code/kwimage/kwimage/im_color.py Color
Example
>>> print(Color('g')) >>> print(Color('orangered')) >>> print(Color('#AAAAAA').as255()) >>> print(Color([0, 255, 0])) >>> print(Color([1, 1, 1.])) >>> print(Color([1, 1, 1])) >>> print(Color(Color([1, 1, 1])).as255()) >>> print(Color(Color([1., 0, 1, 0])).ashex()) >>> print(Color([1, 1, 1], alpha=255)) >>> print(Color([1, 1, 1], alpha=255, space='lab'))
- forimage(image, space='auto')[source]¶
Return a numeric value for this color that can be used in the given image.
Create a numeric color tuple that agrees with the format of the input image (i.e. float or int, with 3 or 4 channels).
- Parameters
image (ndarray) – image to return color for
space (str) – colorspace of the input image. Defaults to ‘auto’, which will choose rgb or rgba
- Returns
the color value
- Return type
Tuple[Number, …]
Example
>>> import kwimage >>> img_f3 = np.zeros([8, 8, 3], dtype=np.float32) >>> img_u3 = np.zeros([8, 8, 3], dtype=np.uint8) >>> img_f4 = np.zeros([8, 8, 4], dtype=np.float32) >>> img_u4 = np.zeros([8, 8, 4], dtype=np.uint8) >>> kwimage.Color('red').forimage(img_f3) (1.0, 0.0, 0.0) >>> kwimage.Color('red').forimage(img_f4) (1.0, 0.0, 0.0, 1.0) >>> kwimage.Color('red').forimage(img_u3) (255, 0, 0) >>> kwimage.Color('red').forimage(img_u4) (255, 0, 0, 255) >>> kwimage.Color('red', alpha=0.5).forimage(img_f4) (1.0, 0.0, 0.0, 0.5) >>> kwimage.Color('red', alpha=0.5).forimage(img_u4) (255, 0, 0, 127) >>> kwimage.Color('red').forimage(np.uint8) (255, 0, 0)
- ashex(space=None)[source]¶
Convert to hex values
- Parameters
space (None | str) – if specified convert to this colorspace before returning
- Returns
the hex representation
- Return type
- classmethod named_colors()[source]¶
- Returns
names of colors that Color accepts
- Return type
List[str]
Example
>>> import kwimage >>> named_colors = kwimage.Color.named_colors() >>> color_lut = {name: kwimage.Color(name).as01() for name in named_colors} >>> # xdoctest: +REQUIRES(module:kwplot) >>> # xdoctest: +REQUIRES(--show) >>> import kwplot >>> kwplot.autompl() >>> # This is a very big table if we let it be, reduce it >>> color_lut =dict(list(color_lut.items())[0:10]) >>> canvas = kwplot.make_legend_img(color_lut) >>> kwplot.imshow(canvas)
- classmethod distinct(num, existing=None, space='rgb', legacy='auto', exclude_black=True, exclude_white=True)[source]¶
Make multiple distinct colors.
The legacy variant is based on a stack overflow post [HowToDistinct], but the modern variant is based on the
distinctipy
package.References
- HowToDistinct
https://stackoverflow.com/questions/470690/how-to-automatically-generate-n-distinct-colors
- Returns
list of distinct float color values
- Return type
List[Tuple]
Example
>>> # xdoctest: +REQUIRES(module:matplotlib) >>> from kwimage.im_color import * # NOQA >>> import kwimage >>> colors1 = kwimage.Color.distinct(5, legacy=False) >>> colors2 = kwimage.Color.distinct(3, existing=colors1) >>> # xdoctest: +REQUIRES(module:kwplot) >>> # xdoctest: +REQUIRES(--show) >>> from kwimage.im_color import _draw_color_swatch >>> swatch1 = _draw_color_swatch(colors1, cellshape=9) >>> swatch2 = _draw_color_swatch(colors1 + colors2, cellshape=9) >>> import kwplot >>> kwplot.autompl() >>> kwplot.imshow(swatch1, pnum=(1, 2, 1), fnum=1) >>> kwplot.imshow(swatch2, pnum=(1, 2, 2), fnum=1) >>> kwplot.show_if_requested()