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]:
(640, 200)

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


99.3273143822 87.1049950261 69.3338709191
114.093943621 123.171732572 154.975800435

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 [ ]: