我正在尝试混合两个源RGB矢量来创建第三个“合成矢量”,它是前两个的直观组合。
理想情况下,我可以模仿“真正的油漆混合特性”,但为了简单起见,我试图找到一种方法,其结果看起来直观,就像你从组合两个源rgb得到的那样。
最低限度,这些特点:
RED + BLACK =深红色
RED + WHITE =浅红色
最佳,也具有真实的涂料特性:
RED + BLUE = PURPLE
RED + YELLOW = ORANGE
(等)
-
我目前通过添加两个源RGB矢量/ 255,然后归一化(并乘以255)来实现“懒惰方式”。 因此,使用这个:[Red =< 1,0,0> * 255] + [蓝色=< 0,0,1>给出Magenta =< 1,0,1> / sqrt(2)* 255,虽然其他颜色不太直观甚至可见......我需要更好的方法!请帮忙: - )
答案 0 :(得分:16)
您的建议与加权平均值相同吗?
Average R = w1*R1 + w2*R2 + w3*R3 + ... + wn*Rn Average G = w1*G1 + w2*G2 + w3*G3 + ... + wn*Gn Average B = w1*B1 + w2*B2 + w3*B3 + ... + wn*Bn
w是加权分数,它们之和为1。
例如,R1是要混合的第一种颜色的红色成分。
因此,如果你想均匀混合两种颜色,那就是:
Average R = 0.5*R1 + 0.5*R2 Average G = 0.5*G1 + 0.5*G2 Average B = 0.5*B1 + 0.5*B2
至于将结果颜色映射到命名颜色(“深红色”)可能只是做一个查找表并选择最接近的颜色?
答案 1 :(得分:10)
问题在于你试图将两种不同的颜色理论联系起来。 RGB是加色理论(从光源发出彩色光)。在这种情况下,你添加到混音中的光谱越多,你就越接近白色。
对于“油漆混合”,您需要模拟减色理论,该理论控制反射颜色混合的方式。 (即反射光,如油漆,不同的表面等)。这是一个overview。
this page上的JavaScript是关于如何将RGB转换为CMYK的线索。
答案 2 :(得分:2)
混合RGB颜色以模拟减色混合(即,类似油漆的混合物)可以通过将RGB值转换为光谱反射率曲线,然后在那里进行混合来完成。这个问题与另一个stackoverflow.com/questions/10254022/非常相似,其中更详细地讨论了解决方案。
答案 3 :(得分:1)
我认为你应该在你的配色方案中真正定义“+”。
根据您的要求,我将它们翻译成估计的十六进制颜色代码,(rgb表示可以很容易地推断出来。)
RED + BLACK = DARK RED #ff0000 + #000000 = #800000 RED + WHITE = LIGHT RED #ff0000 + #ffffff = #ff8080 optimally, also with real paint characteristics: RED + BLUE = PURPLE #ff0000 + #0000ff = #800080 RED + YELLOW = ORANGE #ff0000 + #ffff00 = #ff8000
我没有看到一个确定的模式,你可以制定一些公式来实现这一目标。
约翰和尼尔斯的方法可能接近颜色,但可能没有达到确切的值。我建议你试一试。
修改强>
更新了错误的颜色代码。那么它现在确实更有意义。
答案 4 :(得分:1)
//您可以手动编写代码以返回。
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
print(s.getsockname()[0])
s.close()
//只是用一种愚蠢的方式证明了概念。一种数学方法会很有用!尽管有一段时间想了,但还没有时间解决这个问题。