In [1]:
from IPython.display import display, Image
dress_full = Image('dress.jpeg')
dress_full
Out[1]:
In [2]:
import numpy as np
from io import BytesIO
import PIL.Image as PILImg
# Thanks to @minrk for these functions
# http://nbviewer.ipython.org/gist/minrk/7076095
def img2array(im):
if im.mode != 'RGB':
im = im.convert(mode='RGB')
return np.fromstring(im.tostring(), dtype='uint8').reshape((im.size[1], im.size[0], 3))
def display_img_array(ima):
im = PILImg.fromarray(ima)
bio = BytesIO()
im.save(bio, format='png')
display(Image(bio.getvalue(), format='png'))
dress_img = img2array(PILImg.open('dress.jpeg'))
# print dress_img.shape
xi = slice(100,300)
yi = slice(0,640)
sliced_dress = dress_img[yi, xi, :]
display_img_array(sliced_dress)
In [3]:
r = sliced_dress[:,:,0]
g = sliced_dress[:,:,1]
b = sliced_dress[:,:,2]
b.shape
Out[3]:
In [4]:
white_or_blue = (b > g) & (b > r)
gold_or_black = ~white_or_blue
white_blue_only = np.zeros_like(sliced_dress)
white_blue_only[white_or_blue,0] = r[white_or_blue]
white_blue_only[white_or_blue,1] = g[white_or_blue]
white_blue_only[white_or_blue,2] = b[white_or_blue]
gold_black_only = np.zeros_like(sliced_dress)
gold_black_only[gold_or_black,0] = r[gold_or_black]
gold_black_only[gold_or_black,1] = g[gold_or_black]
gold_black_only[gold_or_black,2] = b[gold_or_black]
display_img_array(white_blue_only)
display_img_array(gold_black_only)
In [5]:
lace_avg_r = gold_black_only[gold_or_black,0].mean()
lace_avg_g = gold_black_only[gold_or_black,1].mean()
lace_avg_b = gold_black_only[gold_or_black,2].mean()
print lace_avg_r, lace_avg_g, lace_avg_b
lines_avg_r = white_blue_only[white_or_blue,0].mean()
lines_avg_g = white_blue_only[white_or_blue,1].mean()
lines_avg_b = white_blue_only[white_or_blue,2].mean()
print lines_avg_r, lines_avg_g, lines_avg_b
In [6]:
averaged_dress = np.zeros_like(sliced_dress)
averaged_dress[white_or_blue,:] = (lines_avg_r, lines_avg_g, lines_avg_b)
averaged_dress[gold_or_black,:] = (lace_avg_r, lace_avg_g, lace_avg_b)
display_img_array(averaged_dress)
In [ ]: