gpt4 book ai didi

Python PIL - 寻找最近的颜色(舍入颜色)

转载 作者:太空狗 更新时间:2023-10-30 00:54:48 26 4
gpt4 key购买 nike

有一款名为 Roblox 的游戏,玩家通常使用乐高积木制作游戏。

在 Roblox 中,对于砖 block 颜色,您可以使用典型的 RGB 值,但这需要一个额外的元素,在文件大小方面效率不是很高。与使用 RGB 值不同,BrickColor 在文件大小方面更为经济。它使用一个整数来解释为某种颜色。 Here is what I mean: Color Codes

这是我的代码片段:

import Image
f = raw_input('Image:\n')
im = Image.open(f)
rgb_im = im.convert('RGB')
r, g, b = rgb_im.getpixel((x, y))

在我的程序中,我需要找到最接近 RGB 值的颜色代码。

如何实现?

最佳答案

扩展 mattsap 的回答:

我们不需要对所有颜色进行排序,因为我们只是在寻找最接近的颜色。即,我们可以避免计算量大的 sort 并改用 min

我们也不需要计算颜色之间的绝对距离,因为我们只对相对距离感兴趣。即我们也可以避免毕达哥拉斯的“平方根”部分。

这给出:

colours = ( (255, 255, 255, "white"),
(255, 0, 0, "red"),
(128, 0, 0, "dark red"),
(0, 255, 0, "green") )


def nearest_colour( subjects, query ):
return min( subjects, key = lambda subject: sum( (s - q) ** 2 for s, q in zip( subject, query ) ) )


print( nearest_colour( colours, (64, 0, 0) ) ) # dark red
print( nearest_colour( colours, (0, 192, 0) ) ) # green
print( nearest_colour( colours, (255, 255, 64) ) ) # white

当然,一旦您考虑了不同的颜色空间以及每个颜色分量对人眼感知的贡献,就会有一个完整的兔子洞,as per this question ,但对于大多数情况而言,这可能过于矫枉过正。

关于Python PIL - 寻找最近的颜色(舍入颜色),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34366981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com