2

我在给定范围内有一些温度值,比如说在 0-100 摄氏度之间。现在我想将这些值映射到颜色,所以 blue=RGB(0,0,255) 表示 0°C,red=RGB(255,0,0) 表示 100°C,中间的颜色表示中间的一些温度。

Matlab实际上有一个叫做colormap的函数。我的东西是用 OpenCV 和 C++ 实现的。有没有人已经在颜色编码方面有一些经验或知道任何好的数学方法来做到这一点?

4

3 回答 3

2

对于从 0 到 100 的温度 (t),您可以计算每种颜色:

Pseudocode:
  Col(t)=(  0+INT(2.55*t), // Red
            0,             // Green
          255-INT(2.55*t)) // Blue
Col(0)  =(0,0,255)
Col(100)=(255,0,0)

系数 2.55 来自给定的 0° 和 100° 摄氏度的最大/最小值。你现在只需要选择你的间隔。

希望有帮助。

于 2012-02-02T16:14:15.020 回答
2

HSV 色彩空间在这里可能会有所帮助。

然而,色调是周期性的,也就是说,如果你从红色一直到光谱的另一端,你会回到红色,这在你的情况下不是很有用。您可能想要做的是选择从红色、黄色和绿色到蓝色(省略粉色/紫色)的色调光谱子集。RGB-HSV 部分中有一张图片应该可以向您展示我的意思。


更新:事实上,这个先前的答案告诉您如何准确实现您描述的 MATLAB Jet调色板。

无论如何, Jet似乎实际上是 HSV 色彩空间的变体!

于 2012-02-02T16:15:13.677 回答
-1

听起来您想要一个 JET 颜色图,它以深蓝色开始,以深红色结束。

假设您有一组从 0 到 100 的温度,以 1 递增:

temps = 0:1:100;

使用 JET 函数在 N 个点上创建一组颜色,其中 N 是温度向量的长度:

colors = jet(length(temps));

现在,要访问第一个温度的颜色(这将给出蓝色):

colors(1,:)

或最后一个温度的颜色(这将是红色):

colors(end,:)
于 2012-02-02T18:44:32.197 回答