首頁 > 後端開發 > Golang > 我們如何使用演算法準確地模擬油漆顏色混合?

我們如何使用演算法準確地模擬油漆顏色混合?

Mary-Kate Olsen
發布: 2024-11-29 15:41:11
原創
569 人瀏覽過

How Can We Accurately Model Paint Color Mixing Using an Algorithm?

在繪畫色彩空間中混合顏色的演算法

混合物理顏料時,產生的顏色與混合顏色時可能期望的顏色不同數位螢幕。這是因為油漆通過吸收進行混合,而數位混色涉及發射。

油漆吸收和數位混色

  • 油漆吸收: 油漆吸收特定波長的光,從而產生可見的顏色。例如,藍色塗料吸收紅色和綠色波長,僅反射藍光。
  • 數位混色:數位顯示器發射光來創造顏色。混合兩種數位顏色時,產生的顏色是發射波長的組合。

油漆顏色空間中的顏色混合演算法

在油漆中混合色彩色彩空間涉及從白光中減去吸收的波長(255、255、 255)。例如,將藍色顏料(吸收紅色和綠色)與黃色顏料(吸收藍色)混合會產生渾濁的綠色。

使用HLS 色彩空間的替代解決方案

替代,使用HLS(色相、亮度、飽和度)色彩空間可以提供更直觀的混色結果,與物理吸收特性無關Paint.

HLS 色彩空間中顏色混合的Python程式碼

下面是一個Python 函數,用來計算HLS 色彩空間中兩種顏色之間的平均值:

import math
from colorsys import rgb_to_hls, hls_to_rgb

def average_colors(rgb1, rgb2):
    h1, l1, s1 = rgb_to_hls(rgb1[0]/255., rgb1[1]/255., rgb1[2]/255.)
    h2, l2, s2 = rgb_to_hls(rgb2[0]/255., rgb2[1]/255., rgb2[2]/255.)
    s = 0.5 * (s1 + s2)
    l = 0.5 * (l1 + l2)
    x = cos(2*pi*h1) + cos(2*pi*h2)
    y = sin(2*pi*h1) + sin(2*pi*h2)
    if x != 0.0 or y != 0.0:
        h = atan2(y, x) / (2*pi)
    else:
        h = 0.0
        s = 0.0
    r, g, b = hls_to_rgb(h, l, s)
    return (int(r*255.), int(g*255.), int(b*255.))
登入後複製

使用這個函數,我們可以近似混合藍色和黃色顏料的結果,對於例子:

>>> average_colors((255, 255, 0), (0, 0, 255))
(0, 255, 111)
登入後複製

這種方法提供了更直觀的混色結果,不受物理油漆吸收特性的限制。

以上是我們如何使用演算法準確地模擬油漆顏色混合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板