gaiar
6/14/2018 - 7:27 AM

## convert_palette.py

``````import pandas as pd
import numpy as np
from PIL import Image
from PIL import ImageEnhance
import cv2

im = Image.open(path)

# Get np.array from image
im_array = np.asarray(im)

# Blur Image
blur = Image.fromarray(cv2.medianBlur(im_array,5))

# Enhance color for easier split

# Get unique colors from Image

unique_colors = set()
def get_unique_colors(img):
for i in range(0,img.size[0]):
for j in range(0,img.size[1]):
r,g,b = img.getpixel((i,j))
return(unique_colors)

# Create a dictionary computing each unique color frequency

from collections import defaultdict
by_color = defaultdict(int)
by_color[pixel] += 1

# Detect two most frequent colors that are not black
# (black will always be sorted(by_color.values(),reverse=True)[0]  with over 10k black pixels)

colors_list = []
for e,j in by_color.iteritems():
if j == sorted(by_color.values(),reverse=True)[1]:
colors_list.append(e)
if j == sorted(by_color.values(),reverse=True)[2]:
colors_list.append(e)

def get_letter_order(im):
for x in range(0,im.size[0]):
for y in range(0,im.size[1]):
if impx[x,y] == colors_list[0]:
return(colors_list[0],colors_list[1])
if impx[x,y] == colors_list[1]:
return(colors_list[1],colors_list[0])

# Get each letter separately by replacing the other color with black pixels

if im1[x,y] <> first_letter_color:
im1[x,y] = (0,0,0)
if im2[x,y] <> second_letter_color:
im2[x,y] = (0,0,0)``````
``````#!/usr/bin/env python3
from PIL import Image

def quantizetopalette(silf, palette, dither=False):
"""Convert an RGB or L mode image to use a given P image's palette."""

# use palette from reference image
if palette.mode != "P":
raise ValueError("bad mode for palette image")
if silf.mode != "RGB" and silf.mode != "L":
raise ValueError(
"only RGB or L mode images can be quantized to a palette"
)
im = silf.im.convert("P", 1 if dither else 0, palette.im)
# the 0 above means turn OFF dithering

# Later versions of Pillow (4.x) rename _makeself to _new
try:
return silf._new(im)
except AttributeError:
return silf._makeself(im)

palettedata = [0, 0, 0, 102, 102, 102, 176, 176, 176, 255, 255, 255]
palimage = Image.new('P', (16, 16))
palimage.putpalette(palettedata * 64)
oldimage = Image.open("School_scrollable1.png")
newimage = quantizetopalette(oldimage, palimage, dither=False)
newimage.show()``````
``````from PIL import Image

col = Image.open('myimage.jpg')
gry = col.convert('L')
grarray = np.asarray(gry)
bw = (grarray > grarray.mean())*255
imshow(bw)``````
``````from PIL import Image
image_file = Image.open("cat-tied-icon.png") # open colour image
image_file = image_file.convert('1') # convert image to black and white
image_file.save('/tmp/result.png')``````
``````from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

img = Image.new('RGB', (264, 176), color = (255, 255, 255))

font_path = '/usr/share/fonts/truetype/ubuntu/UbuntuMono-R.ttf'
font = ImageFont.truetype(font_path, 20)

draw = ImageDraw.Draw(img)
draw.text((15, 15), 'Is it your text?', font=font, fill=(0, 0, 0))

img.save('img_with_text.bmp', 'bmp')``````
``````def nearest(pixel_color, mem={}):
if pixel_color in mem:
return mem[pixel_color]
n = min(floss_palette, key=lambda fc:delta_e_cie2000(pixel_color, fc))
mem[pixel_color] = n
return mem[pixel_color]

result = [nearest(pixel_color) for pixel_color in image]``````