Compare commits

..

No commits in common. "9891be61a87587ed6390b494b39cb9a2774d10b8" and "537ac0075bf21873d4d4b0bceeab54e86aa53285" have entirely different histories.

3 changed files with 25 additions and 9 deletions

View File

@ -11,4 +11,3 @@ line=2.3
fill=true fill=true
mode="stipple" mode="stipple"
display=false display=false
log=1

View File

@ -25,7 +25,6 @@ class Posterize:
previews = [] previews = []
svgs = [] svgs = []
headless = False headless = False
jobs = 1
pallete = None pallete = None
pallete_space = 'BGR' pallete_space = 'BGR'
@ -44,14 +43,13 @@ class Posterize:
output = None output = None
def __init__ (self, image, pallete, n_colors, output, headless, jobs) : def __init__ (self, image, pallete, n_colors, output, headless) :
self.image = cv2.imread(image) self.image = cv2.imread(image)
(self.h, self.w) = self.image.shape[:2] (self.h, self.w) = self.image.shape[:2]
self.pallete = pallete self.pallete = pallete
self.n_colors = n_colors + 1 self.n_colors = n_colors + 1
self.output = output self.output = output
self.headless = headless self.headless = headless
self.jobs = jobs
if not os.path.exists(self.output) : if not os.path.exists(self.output) :
print(f'Output directory {self.output} does not exist, creating...') print(f'Output directory {self.output} does not exist, creating...')
@ -94,14 +92,34 @@ class Posterize:
layer_name = f'WHITE.png' layer_name = f'WHITE.png'
output_layer = os.path.join(self.output, layer_name) output_layer = os.path.join(self.output, layer_name)
cv2.imwrite(output_layer, mask) cv2.imwrite(output_layer, mask)
self.layers.append({ self.layers.append({
'layer' : output_layer, 'layer' : output_layer,
'color' : white, 'color' : white,
'space' : self.pallete_space 'space' : self.pallete_space
}) })
for i in range(self.n_colors) :
if list_match(self.original_colors[i], white) :
continue
original = self.original_colors[i]
mask = self.extract_color_mask(self.image, original)
original_normalized = convert_color(original, 'BGR', self.pallete_space)
if self.pallete_space == 'RGB' or self.pallete_space == 'BGR' :
closest, dist = closest_color_weighted_euclidean(self.colors, original_normalized, self.pallete_space)
else :
closest, dist = closest_color_euclidean(self.colors, original_normalized)
self.colors = remove_from_list(self.colors, closest)
name = self.match_color_name(closest)
layer_name = f'{name}.png'
output_layer = os.path.join(self.output, layer_name)
cv2.imwrite(output_layer, mask)
self.layers.append({
'layer' : output_layer,
'color' : closest,
'space' : self.pallete_space
})
mask = cv2.bitwise_not(mask)
composite[mask > 0] = np.array(convert_color(closest, self.pallete_space, 'BGR'))
composite_name = f'posterized.png' composite_name = f'posterized.png'
composite_path = os.path.join(self.output, composite_name) composite_path = os.path.join(self.output, composite_name)

View File

@ -10,7 +10,6 @@ parser.add_argument('colors', type=int, help='Number of colors to separate into'
parser.add_argument('pallete', type=str, help='Pallete file') parser.add_argument('pallete', type=str, help='Pallete file')
parser.add_argument('output', type=str, help='Output dir to write to') parser.add_argument('output', type=str, help='Output dir to write to')
parser.add_argument('--headless', type=bool, default=False, help='Run script headless') parser.add_argument('--headless', type=bool, default=False, help='Run script headless')
parser.add_argument('-j', '--jobs', type=int, default=1, help="Number of jobs to run in parallel")
class Separate : class Separate :
input = '' input = ''
@ -30,7 +29,7 @@ class Separate :
print(f'File {args.pallete} does not exist') print(f'File {args.pallete} does not exist')
exit(2) exit(2)
Posterize(self.input, self.pallete, args.colors, args.output, args.headless, args.jobs) Posterize(self.input, self.pallete, args.colors, args.output, args.headless)
if __name__ == "__main__" : if __name__ == "__main__" :