我想要一个彩虹色渐变。
我有数值,最大值是红色,最小值是蓝色。 我试图找到一种具有比例颜色的算法,即一半将是绿色,一半和最大之间将是黄色或橙色....
我从这开始:Get color value from numeric values 但我的功能不正确,如果有人可以帮助我......我尝试使用HSV,RGB ...但我比开发者更像WebDesigner .. 谢谢!
编辑-----------------
这个帮助!非常感谢,我确信Value必须是可变的,但只有Hue才能得到正确的结果......
$h = ($value * 360) / $max;
$color = HSV_TO_RGB($h / 360, 1, 1);
第一次,我忘了将360除以0-1之间的值......我是个白痴。可以在Web上轻松找到HSV_TO_RGB函数(Google中的hsv到rgb php)。 我现在用粗体来获得正确的颜色。
非常感谢。
答案 0 :(得分:0)
Basicaly你需要的是具有固定值和饱和度的HSV到RGB功能(假设饱和度和值为100)并且仅在0(你的最小值)和360(你的最大值)之间改变Hue。 你可以通过网络找到很多hsv2rgb php实现,我认为应该可以解决这个问题。
希望这个帮助
答案 1 :(得分:0)
我发现this tutorial对于创建调色板和理解彩虹通常如何生成非常有用。我建议彻底阅读,了解如何创建任意长度的重复和非重复颜色循环。
javascript很容易翻译成OpenCV Python,如下所示。 makeColorGradient
生成指定count
的RGB颜色列表。其余的代码只是测试它并很好地显示渐变。再次参考冷梯度类型和参数值的教程。 =)
import math
import cv2
import numpy as np
def makeColorGradient(freq1, freq2, freq3,
phase1, phase2, phase3,
center=128, width=127, count=50):
colors = []
for i in range(count):
red = int(math.sin(freq1*i + phase1) * width + center);
grn = int(math.sin(freq2*i + phase2) * width + center);
blu = int(math.sin(freq3*i + phase3) * width + center);
#document.write( '<font color="' + RGB2Color(red,grn,blu) + '">█</font>');
colors.append((red,grn,blu))
return colors
def main():
freq = 2.4 #non repeating color set
#freq = 0.3 #nice happy rainbow =)
phases = [0,2,4]
count = 67 #number of colors to generate
colors = makeColorGradient(freq,freq,freq,
phases[0],phases[1],phases[2],
count=count)
winname = 'Color Gradient count='+str(count)
cv2.namedWindow(winname)
w = 800
h = 100
canvas = np.zeros((h,w,3),np.uint8)
linspace = np.linspace(0,w,count,endpoint=True)
linspace = map(int, linspace)
for i in range(count-1):
r1 = (linspace[i], 0)
r2 = (linspace[i+1], h)
color = colors[i]
cv2.rectangle(canvas, r1, r2, color, thickness=cv2.cv.CV_FILLED)
cv2.imshow(winname, canvas)
#keep window open till escape key pressed
while(1):
if(cv2.waitKey(15) == 27):
break
if __name__ == '__main__':
main()
print 'done'