Repository navigation
Expand file tree
/
Copy pathkmeans.py
More file actions
112 lines (83 loc) · 2.96 KB
/
Copy pathkmeans.py
File metadata and controls
112 lines (83 loc) · 2.96 KB
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from imageio import imread
from skimage.transform import resize
from sklearn.cluster import KMeans
from matplotlib.colors import to_hex, to_rgb
def generate_color_blocks(rgb_colors, output_file):
num_blocks = len(rgb_colors)
# 创建一个子图
fig, ax = plt.subplots()
# 设置坐标轴范围
ax.set_xlim(0, num_blocks)
ax.set_ylim(0, 1)
# 隐藏坐标轴
ax.axis('off')
# 绘制色块和添加文本说明
for i, rgb_color in enumerate(rgb_colors):
# 将整数RGB转换为浮点数
rgb_color_float = (rgb_color[0] / 255.0,
rgb_color[1] / 255.0, rgb_color[2] / 255.0)
ax.fill_between([i, i+1], 0, 1, color=rgb_color_float)
hex_color = '{}-#{:02X}{:02X}{:02X}'.format(
i, int(rgb_color[0]), int(rgb_color[1]), int(rgb_color[2]))
# 添加文本说明
rgb_text = f"{hex_color}"
ax.text(i + 0.5, 0.5, rgb_text, color='black',
ha='center', va='center', fontsize=8)
# 保存图形为文件
plt.savefig(output_file, bbox_inches='tight', pad_inches=0)
def get_color_palette(filepath):
np.random.seed(0)
img = imread(filepath)
img = resize(img, (200, 200))
data = pd.DataFrame(img.reshape(-1, 3),
columns=['R', 'G', 'B'])
kmeans = KMeans(n_clusters=5,
random_state=0)
# Fit and assign clusters
data['Cluster'] = kmeans.fit_predict(data)
palette = kmeans.cluster_centers_
palette_list = list()
for color in palette:
palette_list.append([[tuple(color)]])
colors = []
for color in palette_list:
tmp = to_rgb(color[0][0])
r = int(255 * tmp[0])
g = int(255 * tmp[1])
b = int(255 * tmp[2])
colors.append((r, g, b))
return colors[0], colors
if __name__ == "__main__":
filepath = "data/0:1:23.jpg"
# np.random.seed(0)
# img = imread(filepath)
# # Show image
# plt.axis('off')
# plt.imshow(img)
# img = resize(img, (200, 200))
# data = pd.DataFrame(img.reshape(-1, 3),
# columns=['R', 'G', 'B'])
# kmeans = KMeans(n_clusters=5,
# random_state=0)
# # Fit and assign clusters
# data['Cluster'] = kmeans.fit_predict(data)
# palette = kmeans.cluster_centers_
# palette_list = list()
# for color in palette:
# palette_list.append([[tuple(color)]])
# colors = []
# for color in palette_list:
# color_hex = to_hex(color[0][0])
# print(color_hex)
# # plt.figure(figsize=(1, 1))
# # plt.axis('off')
# # plt.imshow(color)
# # plt.show()
# # print(to_rgb(color[0][0]))
# tmp = to_rgb(color[0][0])
# colors.append((255 * tmp[0], 255 * tmp[1], 255 * tmp[2]))
_, colors = get_color_palette(filepath)
generate_color_blocks(colors, "./data/palette.png")