在計算機中使用的是rgb顏色模型,兩種表現形式:十六進製制表示法和01表示法。
1. 十六進製制表示法:rgba通道值範圍分別為0~255。
2.01表示法:rgba通道值範圍分別為0~1。
轉換方式:十六進製制表示法中rgba每個通道的值除以255就能得到對應通道的值。
接下來所有的顏色均是用01表示法。
先給出程式模板:
vec3 circle(vec2 uv,vec2 pos,float radius,float blur,vec3 color_1,vec3 color_2)
void mainimage( out
vec4 fragcolor, in
vec2 fragcoord )
(此處維基)
color = circle(uv,vec2(0,0),0.6,0.005,vec3(1.,0.,0.),vec3(0.,0.,0.));
首先以紅色(1,0,0)為色彩畫了乙個圓,同時背景為黑色(0,0,0)。
之後我想在紅色圓的基礎上,繪製乙個比較小的黃色(1,1,0)的圓。試試我前面注釋掉的那句**,發現顏色的賦值直接被覆蓋掉了,得不到想要的結果,那麼此處就要使用色彩疊加。
梳理一下思路:分為三個區域,
a.背景色為黑色(0,0,0)情況下,我們讓其再加上乙個黑色(0,0,0),那麼它必然還是(0,0,0),所以背景還是黑色。
b.在大圓減去小圓的面積部分,本來為紅色(1,0,0),加上我們在小圓外繪製的黑色(0,0,0),那麼結果依然是紅色(1,0,0)
c.小圓部分本來的顏色為紅色(1,0,0),加上之後繪製的黃色(1,1,0),那麼得到的結果就應該是(2,1,0),但是由於01表示法每個通道的值為0~1,所以程式會幫我們把超過1的值自動設定為1(0也是同理)。
要注意的一點是:程式只有在最後繪製畫素顏色的時候,才會幫我們自動處理這個操作,換句話說,在之前的計算中,也許你知道你的這個變數是顏色值,但是程式還不懂,它只會按照乙個或者多個float值來看待,並不會進行自動clmap01的操作。
知道這個計算思路,大家可以試試下面的幾句**,看看會發生什麼效果
color = circle(uv,vec2(0,0),0.6,0.005,vec3(1.,0.,0.),vec3(0.,0.,0.));
color += circle(uv,vec2(0,0),0.3,0.005,vec3(1.,1.,0.),vec3(0.,0.,0.));
color += circle(uv,vec2(0,0),0.3,0.005,vec3(0.,0.,1.),vec3(0.,0.,0.));
color += circle(uv,vec2(0,0),0.6,0.005,vec3(0.,0.,.5),vec3(0.,0.,0.));
color += circle(uv,vec2(0,.5),0.3,0.005,vec3(0.,.8,0.),vec3(0.,0.,0.));
color += circle(uv,vec2(0.4,-.3),0.3,0.005,vec3(0.,.8,0.),vec3(0.,0.,0.));
color += circle(uv,vec2(-0.4,-.3),0.3,0.005,vec3(0.,.8,0.),vec3(0.,0.,0.));
(此處維基)
cmy顏色模型是在印刷中使用的,分別藏青,品紅,黃。與rgb有對應的轉換公式:拿第乙個通道舉例,1-r=c。
//cmy三原色
顏色之間還能夠相乘和相除,具體大家只要按照思路推一下就就能夠得出結論。=w=
opencv自學筆記 02 色彩空間
rgb轉化灰度圖,hsv,動態捕獲特定顏色的物體 import cv2 as cv import numpy as np 顏色空間 def color space demo image gray cv.cvtcolor image,cv.color bgr2gray yuv cv.cvtcolor ...
opencv學習(四) 色彩空間轉換
如下 匯入cv模組 h 0 180 s 0 255 v 0 255 import cv2 as cv import numpy as np def extrace object demo capture cv.videocapture f projects images video demo.wmv...
open cv2學習(三) 色彩空間
在色彩學中,人們建立了多種色彩模型,以一維 二維 三維甚至四維空間座標來表示 某一色彩,這種座標系統所能定義的色彩範圍即色彩空間rgb red,green,blue r g b 取值範圍都為0 255 sv hue,saturation,value h 0 180 s 0 255 v 0 255 h...