首页 >后端开发 >Golang >如何使用 Python 找到两个给定 RGB 颜色之间的中间颜色?

如何使用 Python 找到两个给定 RGB 颜色之间的中间颜色?

DDD
DDD原创
2024-12-08 16:45:14560浏览

How Can I Find the Intermediate Color Between Two Given RGB Colors Using Python?

寻找绘画色调之间的中间颜色

混合颜料时,所得的颜色会受到颜料吸收特性的影响。蓝色涂料吸收红光和绿光,而黄色涂料吸收蓝光。当组合时,这些颜料理论上会产生浑浊的灰色或黑色。然而,在实践中,蓝色油漆偏向绿色通常会导致浑浊的绿色色调。

沿着色轮插值颜色的算法可以提供直观的结果,而不是模拟油漆混合。 HSL(色调、饱和度、亮度)颜色空间特别有用,因为它允许对色调进行平均。

Python 实现

下面的 Python 代码实现了插值算法:

from colorsys import rgb_to_hls,hls_to_rgb
from math import sin,cos,atan2,pi

def average_colors(rgb1, rgb2):
    h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.)
    h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.)
    s = 0.5 * (s1 + s2)
    l = 0.5 * (l1 + l2)
    x = cos(2*pi*h1) + cos(2*pi*h2)
    y = sin(2*pi*h1) + sin(2*pi*h2)
    if x != 0.0 or y != 0.0:
        h = atan2(y, x) / (2*pi)
    else:
        h = 0.0
        s = 0.0
    r, g, b = hls_to_rgb(h, l, s)
    return (int(r*255.), int(g*255.), int(b*255.))

结果

使用蓝色和黄色作为输入颜色,算法产生绿色色调:

>>> average_colors((255,255,0),(0,0,255))
(0, 255, 111)

混合蓝色和青色产生青色:

>>> average_colors((255,255,0),(0,255,255))
(0, 255, 0)

局限性

需要注意的是,该算法不能准确模拟油漆混合。油漆混合涉及光的吸收,这是一个更复杂的过程。 HSL 插值算法提供了直观的颜色混合,但不以物理现实为基础。

以上是如何使用 Python 找到两个给定 RGB 颜色之间的中间颜色?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn