From ce463252553821c0d7107ff967b2b3184335dd84 Mon Sep 17 00:00:00 2001 From: Vinicius Munhoz Date: Sun, 13 Oct 2019 12:52:55 -0300 Subject: [PATCH 1/2] Add gradient_map script --- gradient_map/README.md | 20 +++++++++ gradient_map/example.png | Bin 0 -> 60813 bytes gradient_map/gradient_map.py | 81 +++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 gradient_map/README.md create mode 100644 gradient_map/example.png create mode 100644 gradient_map/gradient_map.py diff --git a/gradient_map/README.md b/gradient_map/README.md new file mode 100644 index 0000000..da2eb5d --- /dev/null +++ b/gradient_map/README.md @@ -0,0 +1,20 @@ +# Gradient Map + +Apply gradient map to an image file + +![](example.png) + +Requirements: +* `cv2`, `numpy` and `matplotlib` + +Params: +* `python gradiend_map.py -i filename.jpg` Input image file. (jpg or png) +* `python gradiend_map.py -o filename.jpg` Output file name. (default: image_mapped.jpg) +* `python gradiend_map.py -w` Hexadecimal color for white end of spectrum. (default: #000000) +* `python gradiend_map.py -b` Hexadecimal color for black end of spectrum. (default: #ffffff) +* `python gradiend_map.py -h` to show more info + +Usage: +* `python gradiend_map.py -i 'image.jpg'` Creates a black and white copy of the image named image_mapped.jpg +* `python gradiend_map.py -i 'image.jpg' -o 'something.jpg'` Creates a black and white copy of the image named something.jpg +* `python gradiend_map.py -i 'image.jpg' -w '#ffff00' -b '#ff0000'` Creates a image going from yellow to red named image_mapped.jpg diff --git a/gradient_map/example.png b/gradient_map/example.png new file mode 100644 index 0000000000000000000000000000000000000000..41753565e51b960b9e432f6b537a2e51775fabe2 GIT binary patch literal 60813 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
U6acm{rYf=N3ykc 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 literal 0 HcmV?d00001 diff --git a/gradient_map/gradient_map.py b/gradient_map/gradient_map.py new file mode 100644 index 0000000..d61ba2c --- /dev/null +++ b/gradient_map/gradient_map.py @@ -0,0 +1,81 @@ +import argparse +import cv2 +import numpy as np +import matplotlib as mpl +import matplotlib.pyplot as plt + + +def apply_colormap(img_path, colors, output): + input_img = cv2.imread(img_path, 0) + + rgb_colors = [] + for c in colors: + rgb_colors.append(hex_to_rgb(c)) + + cmap = make_cmap(rgb_colors) + + colored_image = apply_custom_colormap(input_img, cmap) + cv2.imwrite(output, colored_image) + + +def hex_to_rgb(h): + h = h.lstrip('#') + return tuple(int(h[i:i+2], 16) for i in (0, 2, 4)) + + +def make_cmap(colors): + ''' + Creates a custom color map with equaly spaced colors + colors: Tuple containing the RGB values. Must be an int from 0 to 255. + ''' + + bit_rgb = np.linspace(0, 1, 256) + position = np.linspace(0, 1, len(colors)) + + for i in range(len(colors)): + colors[i] = (bit_rgb[colors[i][0]], + bit_rgb[colors[i][1]], + bit_rgb[colors[i][2]]) + + colors_dict = {'red': [], 'green': [], 'blue': []} + for pos, color in zip(position, colors): + colors_dict['red'].append((pos, color[0], color[0])) + colors_dict['green'].append((pos, color[1], color[1])) + colors_dict['blue'].append((pos, color[2], color[2])) + + cmap = mpl.colors.LinearSegmentedColormap('custom_colormap', colors_dict, 256) + return cmap + + +def apply_custom_colormap(source_image, cmap): + assert source_image.dtype == np.uint8, 'must be np.uint8 image' + # Squeeze image to turn it to black and white + if source_image.ndim == 3: + source_image = source_image.squeeze(-1) + + # Initialize the matplotlib color map + sm = plt.cm.ScalarMappable(cmap=cmap) + + # Obtain linear color range + color_range = sm.to_rgba(np.linspace(0, 1, 256))[:, 0:3] # color range RGBA => RGB + color_range = (color_range*255.0).astype(np.uint8) # [0,1] => [0,255] + color_range = np.squeeze(np.dstack( + [color_range[:, 2], color_range[:, 1], color_range[:, 0]]), 0) # RGB => BGR + + # Apply colormap for each channel individually + channels = [cv2.LUT(source_image, color_range[:, i]) for i in range(3)] + return np.dstack(channels) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Gradient Map') + + parser.add_argument('-i', '--image', help='Input image file. (jpg or png)', default='image.jpg') + parser.add_argument('-o', '--output', help='Output file name. (default: image_mapped.jpg)', default='image_mapped.jpg') + parser.add_argument('-w', '--whitecolor', help='Hexadecimal color for white. (default: #000000)', default='#000000') + parser.add_argument('-b', '--blackcolor', help='Hexadecimal color for black. (default: #ffffff)', default='#ffffff') + + args = vars(parser.parse_args()) + + apply_colormap(args['image'], [args['blackcolor'], args['whitecolor']], args['output']) + print('Color map applied: {}'.format(args['output'])) From f0d190f3e6beb46ca87b9d44baf5cfa58db4ba56 Mon Sep 17 00:00:00 2001 From: Vinicius Munhoz Date: Sat, 19 Oct 2019 21:29:40 -0300 Subject: [PATCH 2/2] adding gradient_map to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index da4edf8..9f7ec21 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ A list of super awesome scripts which help automate the boring tasks. |[raw_to_jpeg](https://github.com/adityaarakeri/super-scripts/tree/master/raw_to_jpeg) | [Sadeed](https://github.com/Sadeed) | [weather_in_a_city](https://github.com/adityaarakeri/super-scripts/tree/master/weather_in_a_city) | [vish1811](https://github.com/vish1811) | [Movie_Recommendation](https://github.com/adityaarakeri/super-scripts/tree/master/Movie_Recommendation) | [vish1811](https://github.com/vish1811) +| [gradient_map](https://github.com/adityaarakeri/super-scripts/tree/master/gradient_map) | [vmunhoz](https://github.com/vmunhoz) ## Contribuition Guidelines - Make a **separate folder** for your script.