Я нашел этот урок чрезвычайно полезным для создания цветовой палитры и понимания того, как вообще генерируются радуги.Я рекомендую прочитать его полностью, чтобы понять, как создавать повторяющиеся и неповторяющиеся цветовые циклы произвольной длины.
JavaScript был легко переведен в OpenCV Python следующим образом.makeColorGradient
создает список цветов RGB указанного count
.Остальная часть кода просто тестирует его и хорошо отображает градиент.Снова обратитесь к руководству по классным градиентным типам и значениям параметров.=)
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'