yunlyzhang 2024-03-16 21:05 采纳率: 100%
浏览 13
已结题

已经用BH1745读出了RGB值怎么转换为光波长

已经用BH1745读出了RGB值 , 怎么将其转换为光波长?恳请各位大伽赐教。 谢谢

  • 写回答

4条回答 默认 最新

  • yunlyzhang 2024-03-17 19:28
    关注

    我已经找到解决算法, 谢谢大家。

    double BH1745NUC::rgb_to_wavelength(int R, int G, int B) 
    {
        double gamma = 0.8;
        double R_linear = pow((R + 0.055) / 1.055, gamma);
        double G_linear = pow((G + 0.055) / 1.055, gamma);
        double B_linear = pow((B + 0.055) / 1.055, gamma);
    
        double X = 0.4124564 * R_linear + 0.3575761 * G_linear + 0.1804375 * B_linear;
        double Y = 0.2126729 * R_linear + 0.7151522 * G_linear + 0.0721750 * B_linear;
        double Z = 0.0193339 * R_linear + 0.1191920 * G_linear + 0.9503041 * B_linear;
    
        // CIE XYZ to CIE xyY conversion
        double x = X / (X + Y + Z);
        double y = Y / (X + Y + Z);
    
        // xyY to wavelength (in nanometers) conversion
        double wavelength = -1;
    
        if (x >= 0.185 && x <= 0.452 && y >= 0.188 && y <= 0.538) {
            wavelength = 449 + (x - 0.185) / (0.452 - 0.185) * (621 - 449);
        } else if (x >= 0.317 && x <= 0.478 && y >= 0.337 && y <= 0.607) {
            wavelength = 495 + (x - 0.317) / (0.478 - 0.317) * (570 - 495);
        } else if (x >= 0.239 && x <= 0.513 && y >= 0.155 && y <= 0.418) {
            wavelength = 569 + (x - 0.239) / (0.513 - 0.239) * (513 - 569);
        }
    
        return wavelength;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 课上突考,本人大脑过载,求51单片机能手
  • ¥15 java linux下将docx文件转pdf
  • ¥15 maven无法下载依赖包
  • ¥15 关于pycharm, Callable[[str],bool]作为方法参数使用时, lambda 类型不提示问题
  • ¥15 layui数据重载无效
  • ¥15 寻找了解qq家园纵横四海的程序猿。
  • ¥15 optisystem
  • ¥15 VB.NET画图时的撤销编程
  • ¥15 C# webservice 参数特殊字符处理
  • ¥15 关于控制时间更新的一个操作