BodyBalanceEvaluation/backend/tests/test111.py

54 lines
1.6 KiB
Python
Raw Permalink Normal View History

from PIL import Image
import colorsys
def get_unique_colors(image_path):
img = Image.open(image_path).convert("RGB")
unique_colors = list(set(img.getdata()))
return unique_colors
def get_representative_colors(colors, n=12):
# 按亮度排序并均匀抽取
def brightness(rgb):
r, g, b = rgb
return 0.2126*r + 0.7152*g + 0.0722*b
colors.sort(key=brightness)
total = len(colors)
if total <= n:
return colors
step = total / n
return [colors[int(i*step)] for i in range(n)]
def sort_colors_by_hue(colors):
# 转为 HSV并按色相排序
def rgb_to_hue(rgb):
r, g, b = [x/255.0 for x in rgb]
h, s, v = colorsys.rgb_to_hsv(r, g, b)
return h
return sorted(colors, key=rgb_to_hue)
def show_color_preview(colors, width=600, height_per_color=50):
n = len(colors)
height = n * height_per_color
img = Image.new("RGB", (width, height))
for i, color in enumerate(colors):
for y in range(i*height_per_color, (i+1)*height_per_color):
for x in range(width):
img.putpixel((x, y), color)
img.show()
if __name__ == "__main__":
image_path = r"D:\项目资料\技术文档资料\中康项目资料\11.png"
colors = get_unique_colors(image_path)
rep_colors = get_representative_colors(colors, 12)
sorted_colors = sort_colors_by_hue(rep_colors)
print("12 个代表性颜色(按彩虹顺序):")
for i, color in enumerate(sorted_colors, 1):
print(f"{i}: {color}")
show_color_preview(sorted_colors)