如何在python中的颜色之间平滑过渡?

问题描述 投票:3回答:1

我不断将输出存储在CSV文件中。我可以通过下面的代码读取这些数据并触发照明变化。照明的过渡是突然的,但理想情况下,我想尝试仅使用RPi3和neopixels / ws2812b以非线性方式从一种颜色平滑过渡到另一种颜色。

df = pd.read_csv("output.csv")
second_last = df['modes'].iloc[-2]
last = df['modes'].iloc[-1]

if second_last == last and last == "one" :
    pixels.fill((255,0,0))
if second_last == last and last == "two" :
    pixels.fill((0,255,0))
if second_last == last and last == "three" :
    pixels.fill((0,0,255))

我发现可以使用smoothstep函数但不确定如何实际使用它。

如果使用以下函数,如何使RGB值遵循初始颜色为0且其转换为的颜色为1的曲线?这是一种可行的方法吗?

y = 0.5 * (1 + sin((x*pi)-(pi/2)))
python interpolation raspberry-pi3 rgb lighting
1个回答
1
投票

免责声明:我是一名图像/视频专家,我没有使用Raspberry Pi进行照明。我想现在,你的灯光从全红色到全绿色到全蓝色,突然变化。我描述了一种使这种变化更加渐进的方法,但它可能效率低下,并且可能有一种特定于平台的更简单的方法。

您需要定义一个时间(比如t)来转换。此外,您应该了解颜色由pixels.fill((255,0,0))给出。这三个值(255,0,0)代表(R,G,B)*。如果你想要中间色,你需要有这些的组合。因此,例如,如果要从红色转换为蓝色,则需要一系列具有某些中间值的序列。线性地,这可能是这样的:

max=255
step = 255//t
for i in range(0,t):
  red = 255 - (t*step)
  green = 0
  blue = 255 - red
  RGBtriplet = (red, green, blue)

然后将RGBtriplet提供给pixels.fill()。或者,您可以使用您的功能:

   blue = 255 * (0.5 * (1 + sin((t*pi)-(pi/2))))
   green = 0
   red = 255 - blue

这应该给你一个非线性颜色过渡,其中蓝色从0到255,红色从255变为0(红色到蓝色)。

*或可能(B,G,R)。

© www.soinside.com 2019 - 2024. All rights reserved.