This question already has answers here:
How to get the wavelength of a pixel using RGB?

(4个答案)


7年前关闭。




因此,我试图将网络摄像头变成一个简单的光谱仪。因为整个过程不仅在相机芯片后面,而且在获取值的框架背后,我必须使用RGB。这使我问自己一个问题:我能猜出每种光的主要波长是多少?
在到达相机之前,会有一张CD或一块 Crystal 将光束分解成碎片,但是我仍然需要一些自校准功能。而且,我喜欢漂亮的图表。
除了转换RGB外,另一种解决方案可能是生成完整的光谱作为彩虹,并将RGB与光谱进行比较。那可能吗?
问题摘要(请允许我明确告知向下投票者):
  • 如何不仅猜测RGB中的主色,还尝试猜测一些复合值(例如,洋红色)?
  • 如何生成彩虹,以便可以将其与RGB进行比较?

  • 对于那些需要源代码示例的人,我正在寻找功能:
    int rgb2wave(int r, int g, int b) {
        /*some code*/
        return wavelength;
    }
    

    最佳答案

    如果使用衍射光栅或色散棱镜,则像素位置将决定波长。

    RGB滤镜的问题在于它们会影响像素对给定波长的灵敏度。如果要对光谱进行良好的估计,则需要分别校准红色,绿色和蓝色像素的响应。

    您可以通过比较附近的红色,绿色和蓝色像素的响应来做到这一点。由于附近的像素将观察几乎相同频率的光,因此您可以通过观察简单的近乎黑体的光源(例如白炽灯泡)来提取这种校准。

    关于c++ - 寻找混合色的起源作为波长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15011016/

    10-13 09:12