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

时间:2019-03-29 15:51:40

标签: python interpolation raspberry-pi3 rgb lighting

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

powershell returnStatus: true, script: "\$env:WORKSPACE\\ci\\scripts\\publish-$(BRANCH).ps1"

我发现可以使用平稳步长函数,但是不确定如何实际使用它。

例如,如果使用以下功能,如何使RGB值跟随一条曲线,该曲线的初始颜色为0,而过渡颜色为1?这是可行的方法吗?

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))

1 个答案:

答案 0 :(得分:1)

免责声明:我是图像/视频专家,还没有使用Raspberry Pi进行照明。我想现在,您的照明从全红到全绿再到全蓝,变化非常突然。我描述了一种使该更改更加渐进的方法,但它可能效率不高,并且可能存在针对该平台的更简单方法。

您需要定义一个过渡时间(例如 t )。另外,您应该了解颜色是由pixel.fill((255,0,0))给出的。这三个值(255,0,0)表示(R,G,B)*。如果需要中间颜色,则需要将它们组合使用。因此,例如,如果要从红色过渡到蓝色,则需要一系列中间值的序列。线性地,这可能类似于:

import cv2
import yaml
import numpy as np

img = cv2.imread('test1.jpg')
image = cv2.resize(img, None, fx=0.6, fy=0.6)
file_path = 'parking_spots.yml'
refPt = []
data = []

def yaml_loader(file_path):
    //contents of function

def yaml_dump(file_path, data):
    //contents of function

def click_and_crop(event, x, y, flags, param):
    //contents of function

def main():
    cropping = False
    clone = image.copy()
    cv2.namedWindow("Click to mark points")
    cv2.imshow("Click to mark points", image)
    cv2.setMouseCallback("Click to mark points", click_and_crop)
    while True:
        cv2.imshow("Click to mark points", image)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # data list into yaml file
    if data != []:
        yaml_dump(file_path, data)
    cv2.destroyAllWindows()
    hi = "done"

    return hi

if __name__ == "__main__":
    # stuff only to run when not called via 'import' here
    main()

然后是将RGBtriplet馈送到pixel.fill()的问题。或者,您可以使用函数:

from app import app, db
from flask import Flask, request, render_template, session
import datasets

app.secret_key = app.config['SECRET_KEY']

@app.route('/')
@app.route('/index')
def index():
    //Contents of index()

@app.route('/info/<lot_id>')
def info(lot_id):
    //Contents of info()

@app.route('/test')
def test():
    return datasets.main()

if __name__ == '__main__':
    app.run(host='0.0.0.0', port='8000', debug=True)

这应该为您提供非线性的颜色过渡,其中蓝色从0到255,红色从255到0(红色到蓝色)。

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