如何转换指定 波长 到 RGB 颜色?
//指定波长转换成RGBA颜色
std::vector<int> lambdaToColor(double lambda,double gamma = 0.8,double intensityMax = 255.0)
{
double r, g, b, alpha;
if (lambda >= 380.0 && lambda < 440.0) {
r = -1.0 * (lambda - 440.0) / (440.0 - 380.0);
g = 0.0;
b = 1.0;
}else if (lambda >= 440.0 && lambda < 490.0) {
r = 0.0;
g = (lambda - 440.0) / (490.0 - 440.0);
b = 1.0;
}else if (lambda >= 490.0 && lambda < 510.0) {
r = 0.0;
g = 1.0;
b = -1.0 * (lambda - 510.0) / (510.0 - 490.0);
}else if (lambda >= 510.0 && lambda < 580.0) {
r = (lambda - 510.0) / (580.0 - 510.0);
g = 1.0;
b = 0.0;
}else if (lambda >= 580.0 && lambda < 645.0) {
r = 1.0;
g = -1.0 * (lambda - 645.0) / (645.0 - 580.0);
b = 0.0;
}else if (lambda >= 645.0 && lambda <= 780.0) {
r = 1.0;
g = 0.0;
b = 0.0;
}else {
r = 0.0;
g = 0.0;
b = 0.0;
}
//在可见光谱的边缘处强度较低。
if (lambda >= 380.0 && lambda < 420.0) {
alpha = 0.30 + 0.70 * (lambda - 380.0) / (420.0 - 380.0);
}else if (lambda >= 420.0 && lambda < 701.0) {
alpha = 1.0;
}else if (lambda >= 701.0 && lambda < 780.0) {
alpha = 0.30 + 0.70 * (780.0 - lambda) / (780.0 - 700.0);
}else {
alpha = 0.0;
}
//1953年在引入NTSC电视时,计算具有荧光体的监视器的亮度公式如下
int Y = static_cast<int>(0.212671*r + 0.715160*g + 0.072169*b);
//伽马射线 gamma
//照明强度 intensityMax
int R = r == 0.0 ? 0 : static_cast<int>(std::round(intensityMax * std::pow(r * alpha, gamma)));
int G = g == 0.0 ? 0 : static_cast<int>(std::round(intensityMax * std::pow(g * alpha, gamma)));
int B = b == 0.0 ? 0 : static_cast<int>(std::round(intensityMax * std::pow(b * alpha, gamma)));
int A = static_cast<int>(alpha);
return std::vector<int>{R, G, B, A, Y};
}
如何转换指定 波长 到 RGB 颜色?的更多相关文章
- iOS中RGB颜色转换
iOS中RGB常用的色值,同时可将对颜色的设置定义成宏,方便开发应用,如: // RGB颜色转换(16进制->10进制) #define UIColorFromRGB(rgbValue) [UI ...
- 如何将24位RGB颜色转换16位RGB颜色
有许多朋友第一次使用16位彩色显示屏会遇到如何将24位RGB颜色转换为对应的16位RGB颜色的问题, 通过查阅相关资料,就写一下其中的转换原理吧,希望对大家会有所帮助. 我们知道24位RGB是分别由8 ...
- Sass函数--颜色函数--RGB颜色函数
RGB颜色函数-RGB()颜色函数 主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 change-color 等.1. ...
- PHP将CMYK颜色值和RGB颜色相互转换的例子
PHP将CMYK颜色值和RGB颜色相互转换的例子 function hex2rgb($hex) { $color = str_replace('#','',$hex); $rgb = array('r ...
- RGB颜色核对的网址
http://www.917118.com/tool/color_3.html 首页 人民币大写转换 颜色总览 颜色中文名称对照表 CMYK颜色对照表 RGB颜色对照表 色阶板 颜色代码表 调色板 ...
- 基于OpenCV的火焰检测(二)——RGB颜色判据
上文跟大家分享了在做火焰检测中常用到的图像预处理方法,从这一篇博文开始,我将向大家介绍如何一步一步地检测出火焰区域.火焰提取要用 到很多判据,今天我要向大家介绍的是最简单的但是很有效的判据--RGB判 ...
- RGB颜色 三者都是0为黑色而255是白色 解释
问题: RGB颜色 都是0为黑色而255是白色 与日常生活的黑色白色差距怎么那么大,(与物理学中的黑色吸收光是否相悖)而且为什么要这样定义呢? 链接:https://www.zhihu.com/que ...
- sass-RGB颜色函数-RGB()颜色函数
在 Sass 的官方文档中,列出了 Sass 的颜色函数清单,从大的方面主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 ...
- RGB颜色中的参数是变量的时候,为什么要加上两个+号在左右?
<script> function draw(){ var c=document.getElementById("mycanvas"); var cxt=c.getCo ...
随机推荐
- 《Mining the Web:Transforming Customer Data into Customer Value》读后札记
<Mining the Web:Transforming Customer Data into Customer Value> <Web数据挖掘:将客户数据转化为客户价值> — ...
- NodeJS淘宝 CNPM 镜像
原文地址:http://npm.taobao.org/ 设置NPM镜像(前提已安装NodeJS): npm config set registry https://registry.npm.taoba ...
- 创建oracle本地数据库步骤详解
前提:安装好oracle数据库客户端: PL/SQL DEVELOPER 1.打开DatabaseConfiguration Assistant,如图: 选择创建数据库->next->选择 ...
- FreeBSD长模式不兼容
二进制转换与此平台上的长模式不兼容.此虚拟环境中的长模式将被禁用.因此需要使用长模式的应用程序将无法正常运行.请参见 http://vmware.com/info?id=152 了解更多详细信息. m ...
- 一步一步解析H.264码流的NALU(SPS,PSS,IDR)获取宽高和帧率
分析H.264码流的工具 CodecVisa,StreamEye以及VM Analyzer NALU是由NALU头和RBSP数据组成,而RBSP可能是SPS,PPS,Slice或SEI 而且SPS位于 ...
- X264参考手册
艺搜简介 基本语法: x264 [options]-o outfile infile 注意与ffmpeg的输入输出文件位置恰好相反: ffmpeg[options][[infile options]- ...
- java后台如何根据表单中input的顺序获取value值
如果java后台准备用Servlet来实现,可以直接在doPost( )或者doGet( )中使用如下语句:request.setCharacterEndoding("UTF-8" ...
- eclipse建maven pom报错
pom报:org.apache.maven.archiver.MavenArchiver.getManifest 解决办法: 升级m2eclipse插件版本 help->install news ...
- diango-tinymce富文本编译器
应用到项目中 在settings.py中为INSTALLED_APPS添加编辑器应用 INSTALLED_APPS = ( ... 'tinymce', ) 在settings.py中添加编辑配置项 ...
- Linux下汇编语言------计算n的阶乘
用高级语言比方C语言写个阶乘非常easy,那如今就来熟悉下Linux使用AT&T汇编格式写一个程序来计算阶乘吧 写法一是 使用跳转指令实现.写法二是使用函数来实现 约定:本程序没有将结果打印在 ...