簡體   English   中英

在HSV中生成兩種顏色之間的顏色列表

[英]Generate color list between two colors in HSV

可以說我有兩種RGB顏色(255,0,0)和(0,0,255),我還需要介於它們之間的100種顏色。 如何根據一些所需步驟生成HSV顏色值列表?

當前使用python 3我創建了以下代碼:

def lerpcolourhsv(rgb1, rgb2, steps):
#convert rgb to hsv
hsv1 = colorsys.rgb_to_hsv(rgb1[0], rgb1[1], rgb1[2])
hsv2 = colorsys.rgb_to_hsv(rgb2[0], rgb2[1], rgb2[2])

# calculate distance between two hue numbers, divide by number of steps. then loop to generate
rgb_colour_list = []
dist = cachefunc.numdistance(hsv1[0], hsv2[0])
step_value = dist / steps
hue = hsv1[0]

for x in range(steps):
    hsv_tupel = (hue, 1, 1)
    hue += step_value
    rgb = colorsys.hsv_to_rgb(hsv_tupel[0], hsv_tupel[1], hsv_tupel[2])
    rgb = (round(rgb[0] * 255), round(rgb[1] * 255), round(rgb[2] * 255), round(255)) #0-1 to 0-255
    rgb_colour_list.append(rgb)

return rgb_colour_list

上面代碼的唯一問題是,它會循環顯示多種不同的顏色,例如:紅色->橙色->黃色->綠色->青色->藍色

我想要一個函數,它產生的結果與此類似: 紅色到藍色漸變

可以看出,此漸變產生了紅色->紫色->藍色的更期望的結果

我嘗試制作一個使用單個rgb通道值進行插值的函數,這給出了更相似的結果,但是感覺到的顏色的亮度和飽和度已關閉,因此我嘗試在hsv顏色空間中進行此操作。

誰能創建一個函數或解釋如何使用hsv顏色空間實現上述漸變?

聽起來您想跨RGB顏色空間而不是色調創建漸變。 而您的問題是,您編寫了一堆代碼將其轉換為HSV,以便可以在色調上漸變並將其轉換回? 如果是這樣,答案很簡單:不要編寫該代碼; 堅持使用RGB。

由於您尚未提供完整的示例,因此我無法向您確切演示如何更改代碼,但是這里有一個簡單的版本:

r1, g1, b1 = rgb1
r2, g2, b2 = rgb2
rdelta, gdelta, bdelta = (r2-r1)/steps, (g2-g1)/steps, (b2-b1)/steps
for step in range(steps):
    r1 += rdelta
    g1 += gdelta
    b1 += bdelta
    output.append((r1, g1, b1))

因此,例如,由於g1g2均為0,因此您的輸出顏色都不會包含任何綠色,我想這就是您要追求的。

(當然,如果您使用的是numpy數組,則整個過程甚至更簡單-您可以將行作為RGB列的2D數組進行操作,並用一次對linspace調用來替換整個循環。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM