0%

闲的蛋疼系列之那个裙子到底什么颜色

有关于那条争议很大的裙子颜色问题

用PIL去做一些简单的分析

非专业图像处理,可能不是很准确

没错就是这个货到底是什么颜色??

各种说法层出不穷,我才不会说我看到的就是白金色的呢,但是。。。。是不是因为所谓周围颜色干扰之类的造成的错觉呢。。。。

实践出真知,截取图中两块同样大小相对颜色稳定的区域然后求出平均颜色来看看~

我截取的区域是(110,190)和(115,320)为起点的90*50的区域,当然,稍微粗略一点,但是基本已经可以看出问题来了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*-
from PIL import Image, ImageEnhance

#截取区域的宽和高
WIDTH = 90
HEIGHT = 50

#截取区域的起始坐标
BRIGHT_X = 110
BRIGHT_Y = 190
DARK_X = 115
DARK_Y = 320

im = Image.open('test.jpg','r')

bright_part = Image.new(im.mode, (WIDTH, HEIGHT), 0)
dark_part = Image.new(im.mode, (WIDTH, HEIGHT), 0)

bright_part.paste(im.crop((BRIGHT_X, BRIGHT_Y, BRIGHT_X + WIDTH, BRIGHT_Y +HEIGHT)), (0, 0))
dark_part.paste(im.crop((DARK_X, DARK_Y, DARK_X + WIDTH, DARK_Y +HEIGHT)), (0, 0))

bright_part.save('bright.jpg')
dark_part.save('dark.jpg')

(现在看起来那个深色部分真的是有点像灰褐色了,浅色部分真的是浅蓝色)

求平均值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# -*- coding: utf-8 -*-
from PIL import Image, ImageEnhance

#截取区域的宽和高
WIDTH = 90
HEIGHT = 50

#截取区域的起始坐标
BRIGHT_X = 110
BRIGHT_Y = 190
DARK_X = 115
DARK_Y = 320

def average(lst,order):
l = [_[order] for _ in lst]
return sum(l) / len(l)

im = Image.open('test.jpg','r')

bright_part = Image.new(im.mode, (WIDTH, HEIGHT), 0)
dark_part = Image.new(im.mode, (WIDTH, HEIGHT), 0)

bright_part.paste(im.crop((BRIGHT_X, BRIGHT_Y, BRIGHT_X + WIDTH, BRIGHT_Y +HEIGHT)), (0, 0))
dark_part.paste(im.crop((DARK_X, DARK_Y, DARK_X + WIDTH, DARK_Y +HEIGHT)), (0, 0))

bright_part.save('bright.jpg')
dark_part.save('dark.jpg')

bright_data = list(bright_part.getdata())
dark_data = list(dark_part.getdata())

average_rgb_of_bright_data = (average(bright_data, 0),average(bright_data, 1),average(bright_data, 2))
average_rgb_of_dark_data = (average(dark_data, 0),average(dark_data, 1),average(dark_data, 2))

result = Image.new(im.mode, (400, 200), 0)

result.paste(average_rgb_of_bright_data, (0,0,400,100))
result.paste(average_rgb_of_dark_data, (0,100,400,200))
result.save('result.jpg')

因为是在阳光下亮度比较高一点~~

我们稍稍吧亮度降低一点然后再看看效果~

调整亮度:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# -*- coding: utf-8 -*-
from PIL import Image, ImageEnhance

#截取区域的宽和高
WIDTH = 90
HEIGHT = 50

#截取区域的起始坐标
BRIGHT_X = 110
BRIGHT_Y = 190
DARK_X = 115
DARK_Y = 320

def average(lst,order):
l = [_[order] for _ in lst]
return sum(l) / len(l)

im = Image.open('test.jpg','r')

bright_part = Image.new(im.mode, (WIDTH, HEIGHT), 0)
dark_part = Image.new(im.mode, (WIDTH, HEIGHT), 0)

bright_part.paste(im.crop((BRIGHT_X, BRIGHT_Y, BRIGHT_X + WIDTH, BRIGHT_Y +HEIGHT)), (0, 0))
dark_part.paste(im.crop((DARK_X, DARK_Y, DARK_X + WIDTH, DARK_Y +HEIGHT)), (0, 0))

bright_part.save('bright.jpg')
dark_part.save('dark.jpg')

bright_data = list(bright_part.getdata())
dark_data = list(dark_part.getdata())

average_rgb_of_bright_data = (average(bright_data, 0),average(bright_data, 1),average(bright_data, 2))
average_rgb_of_dark_data = (average(dark_data, 0),average(dark_data, 1),average(dark_data, 2))

result = Image.new(im.mode, (400, 200), 0)

result.paste(average_rgb_of_bright_data, (0,0,400,100))
result.paste(average_rgb_of_dark_data, (0,100,400,200))
result.save('result.jpg')

dark_pic = ImageEnhance.Brightness(result).enhance(0.4)
dark_pic.save('dark_result.jpg')

问我刚才在干嘛。。。。看看这篇文章也知道我刚刚从盐缸里爬出来~~XD

请我喝杯奶茶

欢迎关注我的其它发布渠道