本文主要是介绍Matlab处理彩色图像 RGB888-RGB565,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
image=imread('E:\64c.bmp');fr=image(:,:,1);
fg=image(:,:,2);
fb=image(:,:,3);
以上代码为打开bmp图片并分开RGB三种分量,所以怎么把RGB888转化成RGB56516位真彩色呢?
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:萧Brenda
链接:http://www.zhihu.com/question/26038646/answer/46135041
来源:知乎
我猜想楼主的意思并不是要问为什么要右移,而是为什么是右移3位吧。如果是这样的话,我来解释一下。先反过来看,当把16位转换为24位的时候,(假设是5.5.5的格式)此时通过掩码和右移操作获取到的R、G、B分量需要进行一个线性的放大过程,这个放大因子是:256/32= 8. (256,32是各分量取值的最大范围)操作上而言,放大8倍,就是左移3位。 那反过来,当把24位转换成16位的时候(5.5.5格式),自然是需要一个线性的缩小因子,也就是右移3位。
当在5.6.5的格式下,R和B操作不变,但是G的分量放大或缩小的因子变成了 256/64 = 4. 于是就变成了左移或者右移2位。”
线性缩小的过程 留下高五位
背景:在我们的计算机中图像是以RGB888格式显示图像的,24位图每个像素保存了32bit的数据,即RGB888+Alpha,Alpha就是半透明填充字节……但是对于真彩的图像而言,肉眼在16bit的时候已经难以分辨了,因此,有些时候,可以讲RGB888转换为RGB565来存储,减少了存储器的容量的同时,降低了数据量;在后端显示的时候,再次把RGB565转换为RGB888,实现数据宽度的匹配!!
一.RGB888->RGB565
方法只要提取相应单色高位即可(R5 G6 B5),但会导致低位的缺失&#
这篇关于Matlab处理彩色图像 RGB888-RGB565的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!