欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。
本篇主要是色彩表示方法:RGBxyz以及它们之间的相互转化
RGB图像:每一个像素点由R、G、B三基色来构成(大多数显示器、摄像头传感器等直接使用此种表示方法进行输入或者输出);通过对R、G、B的量化,编码为RGB888、RGB565等等。
什么是量化和编码?
世界上的颜色有千万种,可以通过不同比例的R、G、B混合出来。我们单独拿出来R(红色)来进行分析。
红色也是有很多很多红色,那么在数字时代该如何去表示呢?
首先我们可以认为从没有红色到最红色是一段线段,线段的不同位置表示不同的红色。
线段上的点有无数个,还是无法表示。
那么此时可以在线段上平均加上一些点,让这些点能够平分这个线段。例:可以加10个点(包括左右端点)。那么当需要表示的红色不在这些点上时,可以就近表示(此时就会有误差)。然后我们就可以用0到9来表示这些点,此时0到9就表示了不同的红色值。
在数字时代,机器内部都是二进制,所以我们会有二进制表示这些点。假设我们将线段上加256点,那么此时正好用8个二进制来表示;如果其他的颜色分量也用8个二进制来表示,组合到一起正好就是RGB888。
RGB888转化为RGB565
有些时候数据输入为RGB888的,但是结果却需要映射为RGB565的。
此时我们应该将R的高5位作为新的R;将G的高6位作为新的G;将B的高5位作为新的B。
这就类似考试成绩出来了,百分制的。但是成绩单只能是十分制的,我们自然要取高位(十位)来作为成绩,否则大小都不合理了。
RGB565转化为RGB888
有些时候数据输入为RGB565的,但是结果却需要映射为RGB888的。
第一种方法:可以将R的5位后面拼接3个0,成为新的R;G的6位后面拼接2个0,成为新的G;B的5位后面拼接3个0,成为新的B(一定要在后面拼接,在前面拼接的话,数值都不合理)。
第二种方法:第一种方法得出的低位永远是0,无法占满所有的颜色分量量程。例:十分制的9,按照第一种方法,改为百分制后,是90;而99才是最高;
此时我们可以将高位的值拼接后低位;以R为例:将R的5位变成新R的高5位,再将R的高三位变为新R的低三位,构成一个新的八位。其他的分量也可以这样做。
想要了解更多信息,可以关注“郝旭帅电子设计团队”,想要获取源代码,可以联系作者。本篇内容中有部分资源来源于网络,如有侵权,请联系作者。
29