From d579e83762ddfaf7baba6c26a45bf2587751c9ce Mon Sep 17 00:00:00 2001 From: mmcwilliams Date: Tue, 24 Oct 2023 16:45:22 -0400 Subject: [PATCH] t --- py/comparison_comparison.py | 63 +++++++------------------------------ py/posterize.py | 47 +-------------------------- 2 files changed, 13 insertions(+), 97 deletions(-) diff --git a/py/comparison_comparison.py b/py/comparison_comparison.py index e9d944e..27aaeee 100644 --- a/py/comparison_comparison.py +++ b/py/comparison_comparison.py @@ -1,6 +1,7 @@ import cv2 import numpy as np from pallete_schema import PalleteSchema +from common import convert_color, closest_color, create_colored_image class ComparisonComparison: def __init__ (self) : @@ -8,64 +9,24 @@ class ComparisonComparison: green = [5, 250, 5] blue = [240, 0, 20] comp_colors = [red, green, blue] - pallete = PalleteSchema('./palletes/test_pallete.json') + pallete = PalleteSchema('./palletes/printed_pallete.json') colors = self.get_colors(pallete.colors) for cc in comp_colors : - ccbgr = self.convert_color(cc, 'RGB', 'BGR') - closest = self.closest(colors, ccbgr) - print(f'{closest} for {ccbgr}') + ccbgr = convert_color(cc, 'RGB', 'HSV') + closest = closest_color(colors, ccbgr) + ccbgr = convert_color(cc, 'RGB', 'BGR') + #print(f'{convert_color(closest,"BGR","RGB")} for {convert_color(ccbgr,"BGR","RGB")}') + original = create_colored_image(100, 100, convert_color(closest, 'HSV', 'BGR')) + chosen = create_colored_image(100, 100, ccbgr) + combined = np.hstack([original, chosen]) + cv2.imshow("image", combined) + cv2.waitKey(0) def get_colors (self, pallete) : colors = [] for color in pallete : - colors.append(color['color']) + colors.append(convert_color(color['color'], 'BGR', 'HSV')) return colors - def convert_color (self, color, color_space_a, color_space_b) : - pixel = np.zeros([1, 1, 3], dtype=np.uint8) - if color_space_a == 'RGB' : - pixel = cv2.cvtColor(pixel, cv2.COLOR_BGR2RGB) - elif color_space_a == 'LAB' : - pixel = cv2.cvtColor(pixel, cv2.COLOR_BGR2LAB) - elif color_space_a == 'HSV' : - pixel = cv2.cvtColor(pixel, cv2.COLOR_BGR2HSV) - #default is BGR - pixel[:] = color - if color_space_a == 'RGB' and color_space_b == 'BGR' : - b = cv2.COLOR_RGB2BGR - elif color_space_a == 'BGR' and color_space_b == 'RGB' : - b = cv2.COLOR_BGR2RGB - elif color_space_a == 'RGB' and color_space_b == 'LAB' : - b = cv2.COLOR_RGB2LAB - elif color_space_a == 'LAB' and color_space_b == 'RGB' : - b = cv2.COLOR_LAB2RGB - elif color_space_a == 'BGR' and color_space_b == 'LAB' : - b = cv2.COLOR_BGR2LAB - elif color_space_a == 'LAB' and color_space_b == 'BGR' : - b = cv2.COLOR_LAB2BGR - elif color_space_a == 'HSV' and color_space_b == 'LAB' : - b = cv2.COLOR_HSV2LAB - elif color_space_a == 'LAB' and color_space_b == 'HSV' : - b = cv2.COLOR_LAB2HSV - elif color_space_a == 'RGB' and color_space_b == 'HSV' : - b = cv2.COLOR_RGB2HSV - elif color_space_a == 'HSV' and color_space_b == 'RGB' : - b = cv2.COLOR_HSV2RGB - elif color_space_a == 'BGR' and color_space_b == 'HSV' : - b = cv2.COLOR_BGRHSV - elif color_space_a == 'HSV' and color_space_b == 'BGR' : - b = cv2.COLOR_HSV2BGR - - cvt = cv2.cvtColor(pixel, b) - return cvt[0, 0] - - def closest(self, colors, color): - colors = np.array(colors) - color = np.array(color) - distances = np.sqrt(np.sum((colors - color) ** 2, axis=1)) - index_of_smallest = np.where(distances == np.amin(distances)) - smallest_distance = colors[index_of_smallest] - return smallest_distance - if __name__ == "__main__": ComparisonComparison() \ No newline at end of file diff --git a/py/posterize.py b/py/posterize.py index 28dbf0a..2b68c02 100644 --- a/py/posterize.py +++ b/py/posterize.py @@ -2,6 +2,7 @@ from sklearn.cluster import MiniBatchKMeans import numpy as np import argparse import cv2 +from common import convert_color, closest_color class Posterize: """Posterize an image and then find nearest colors to use""" @@ -56,49 +57,3 @@ class Posterize: def extract_color_mask (self, image, color): mask = cv2.inRange(image, color, color) return cv2.bitwise_not(mask) - - def convert_color (self, color, color_space_a, color_space_b) : - pixel = np.zeros([1, 1, 3], dtype=np.uint8) - if color_space_a == 'RGB' : - pixel = cv2.cvtColor(pixel, cv2.COLOR_BGR2RGB) - elif color_space_a == 'LAB' : - pixel = cv2.cvtColor(pixel, cv2.COLOR_BGR2LAB) - elif color_space_a == 'HSV' : - pixel = cv2.cvtColor(pixel, cv2.COLOR_BGR2HSV) - #default is BGR - pixel[:] = color - if color_space_a == 'RGB' and color_space_b == 'BGR' : - b = cv2.COLOR_RGB2BGR - elif color_space_a == 'BGR' and color_space_b == 'RGB' : - b = cv2.COLOR_BGR2RGB - elif color_space_a == 'RGB' and color_space_b == 'LAB' : - b = cv2.COLOR_RGB2LAB - elif color_space_a == 'LAB' and color_space_b == 'RGB' : - b = cv2.COLOR_LAB2RGB - elif color_space_a == 'BGR' and color_space_b == 'LAB' : - b = cv2.COLOR_BGR2LAB - elif color_space_a == 'LAB' and color_space_b == 'BGR' : - b = cv2.COLOR_LAB2BGR - elif color_space_a == 'HSV' and color_space_b == 'LAB' : - b = cv2.COLOR_HSV2LAB - elif color_space_a == 'LAB' and color_space_b == 'HSV' : - b = cv2.COLOR_LAB2HSV - elif color_space_a == 'RGB' and color_space_b == 'HSV' : - b = cv2.COLOR_RGB2HSV - elif color_space_a == 'HSV' and color_space_b == 'RGB' : - b = cv2.COLOR_HSV2RGB - elif color_space_a == 'BGR' and color_space_b == 'HSV' : - b = cv2.COLOR_BGRHSV - elif color_space_a == 'HSV' and color_space_b == 'BGR' : - b = cv2.COLOR_HSV2BGR - - cvt = cv2.cvtColor(pixel, b) - return cvt[0, 0] - - def closest(self, colors, color): - colors = np.array(colors) - color = np.array(color) - distances = np.sqrt(np.sum((colors - color) ** 2, axis=1)) - index_of_smallest = np.where(distances == np.amin(distances)) - smallest_distance = colors[index_of_smallest] - return smallest_distance