在搜索中,有很多关于将图像转换为亮度(黑白)或调整饱和度而不改变亮度的信息。但是如何修改亮度本身呢?例如,如何使用5x5矩阵增加红色通道的亮度?最终这将在C语言中使用,但同样的数学方法也适用于Java或Flash。
在搜索中,有很多关于将图像转换为亮度(黑白)或调整饱和度而不改变亮度的信息。但是如何修改亮度本身呢?例如,如何使用5x5矩阵增加红色通道的亮度?最终这将在C语言中使用,但同样的数学方法也适用于Java或Flash。
对于从谷歌跳转过来的任何人,这里是缩放亮度的矩阵:
rl×l + gl + bl gl×l - gl bl×l - bl 0
rl×l - rl gl×l + rl + bl bl×l - bl 0
rl×l - rl gl×l - gl bl×l + rl + gl 0
0 0 0 1
其中
l
— 亮度倍增器,rl
— 红色亮度(sRGB为0.213),gl
— 绿色亮度(sRGB为0.715),bl
— 蓝色亮度(sRGB为0.072)。请注意:此矩阵可能会产生超出色域的颜色,因此在需要准确结果时不要使用它。例如,对于1, 0, 0, 1
向量和l=2
,它将产生1.213, 0.213, 0.213, 1
的结果。从技术上讲,此向量具有预期的亮度(0.426),但显示的颜色将约为0.381。
我相信你会等量改变所有三个颜色值,所以...
为了缩放RGB颜色,可以使用以下矩阵:
float mat[4][4] = {
rscale, 0.0, 0.0, 0.0,
0.0, gscale, 0.0, 0.0,
0.0, 0.0, bscale, 0.0,
0.0, 0.0, 0.0, 1.0,
};