Skip to content

Instantly share code, notes, and snippets.

@maweigert

maweigert/invert.py

Last active Jun 11, 2020
Embed
What would you like to do?
import numpy as np
from colorsys import rgb_to_hls, hls_to_rgb
def _rgb2hls(im):
return np.stack(np.vectorize(rgb_to_hls)(*im.transpose(2,0,1)/256), axis=-1)
def _hls2rgb(im):
return (255*np.stack(np.vectorize(hls_to_rgb)(*im.transpose(2,0,1)), axis=-1)).astype(np.uint8)
def invert(img):
"""Invert a rgb image via lightness inversion
Parameters
----------
img: np.ndarray
The rgb image to be inverted.
Expects img.shape=(n,m,3) and img.dtype=np.uint8
"""
if not img.ndim==3 and img.shape[-1]==3 and img.dtype==np.uint8:
raise ValueError("input image should be of shape (n,m,3) and type np.uint8!")
tmp = _rgb2hls(img)
tmp[...,1] = 1-tmp[...,1]
return _hls2rgb(tmp)
if __name__ == '__main__':
# test it
from skimage.draw import line_aa
import matplotlib.pyplot as plt
# draw random colored lines
img = 255*np.ones((256,256,3), np.uint8)
for _ in range(10):
rr, cc, val = line_aa(*np.random.randint(0,img.shape[0],4))
img[rr, cc] = np.random.randint(100,255,3)
plt.imshow(np.concatenate([img,invert(img)], axis=1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment