已经用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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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 关于控制时间更新的一个操作