24bit转成16bit问题 一个24bit的位图转换成16bit,8bit或4bit位图时,在Windows上可以利用调色板通过各种算法(如八叉树颜色量化算法)得到转化。但是现在的问题是,如果要把这幅24bit位图转化成在没有调色板的系统上(如16bit的液晶显示器)进行显示,假设转成16bit的,那该怎么做呢? 简单的做法是分别提取R,G,B颜色的5位,6位和5位,但是着显然有较大的失真。 有什么好的算法没有呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 图象我不清楚,但是我做声音转换的时候是这样做的,说出来不知道有没有参考价值把16bit样本转化成8bit样本:n = a / 65536 //转换成比例大小,也叫“标准化”过程。b = n * 256完成,其中a为16bit数,b为8bit数 R,G,B颜色的高5位,6位和5位,不是低http://blog.joycode.com/jiangsheng/articles/3579.aspx 这样的问题我也碰到了,我做了比较细致的研究,可以由如下几种方法达到比较好的结果。24bit->8bit或者4bit第一,可以通过八叉树进行减色处理,可以达到非常好的效果;第二,可以通过统计色彩编码的方法,就是从一幅图像中统计出使用最多的256种颜色,然后将图像中的颜色依此往这256种颜色按最短的色彩距离映射,即可得到比较好的结果。 现在的减色方法都是比较成熟的算法,不知道楼主研究它做什么用。24bit->16bit比较的容易,因为graylevel = 0.29 * R + 0.59 * G + 0.11 * B, 因为人的眼睛对灰度比较敏感,16bit 不能被3整除,而Green通道对灰度的贡献是比较大的,所以对Green通道的量化细一些,R:G:B = 5:6:5,Green通道多分了一个bit,就是这个道理,24bit转16bit按照如下公式即可,(C描述) R_16Bit = R_24Bit >> 3; B_16Bit = B_24Bit >> 3; G_16Bit = G_24Bit >> 2; color_16Bit = ((short)R_16Bit << 11) | ((short)G_16bit << 6) | ((short)B_16Bit);24bit转1bit,就是转变成黑白图像,方法只有一个,区别模式识别中的二值化,二值化不仅丢失图像的色彩信息,而且丢失图像的细节。转成黑白图像还要保留图像的大部分细节是非常重要的,使用的是抖动的方法,去图书馆去找找相应的图书,图像处理方面的,都有关于抖动发的论述,可以用两种颜色表示n个灰度级别,从而保留了图像的细节。而不是二值化,二值化是将图像变成了黑白的,但是他是去掉图像的许多细节,保留图像用于识别的部分. 楼主就说这么多了,如果你有什么问题,欢迎于我讨论,也欢迎大家与我讨论! VC显示路径的问题 关于类里CString 的初始化。 CSDN回帖小技巧 sqlserver数据库如何实现分月存储???? 求源码, 学校要求我们用(VC++)做一个类似ACDSEE的看图软件的课程设计,请各位大哥大姐帮下忙谢谢, 求救! 请问有没有将CString字符转为CTime变量函数和方法 大神们,《VC 数据库编程三部教学》第九章的一个小问题 请教关于VC++中文件操作的问题 寻书启事The STL Tutorial and Reference Guide!!! 那位XDJM有《Windows程序调试》的电子版啊? 如何把文本存成文本编辑器不能查看的文件?
n = a / 65536 //转换成比例大小,也叫“标准化”过程。
b = n * 256
完成,其中a为16bit数,b为8bit数
http://blog.joycode.com/jiangsheng/articles/3579.aspx
现在的减色方法都是比较成熟的算法,不知道楼主研究它做什么用。24bit->16bit比较的容易,因为graylevel = 0.29 * R + 0.59 * G + 0.11 * B, 因为人的眼睛对灰度比较敏感,16bit 不能被3整除,而Green通道对灰度的贡献是比较大的,所以对Green通道的量化细一些,R:G:B = 5:6:5,Green通道多分了一个bit,就是这个道理,24bit转16bit按照如下公式即可,(C描述)
R_16Bit = R_24Bit >> 3;
B_16Bit = B_24Bit >> 3;
G_16Bit = G_24Bit >> 2;
color_16Bit = ((short)R_16Bit << 11) | ((short)G_16bit << 6) | ((short)B_16Bit);
24bit转1bit,就是转变成黑白图像,方法只有一个,区别模式识别中的二值化,二值化不仅丢失图像的色彩信息,而且丢失图像的细节。转成黑白图像还要保留图像的大部分细节是非常重要的,使用的是抖动的方法,去图书馆去找找相应的图书,图像处理方面的,都有关于抖动发的论述,可以用两种颜色表示n个灰度级别,从而保留了图像的细节。而不是二值化,二值化是将图像变成了黑白的,但是他是去掉图像的许多细节,保留图像用于识别的部分.
楼主就说这么多了,如果你有什么问题,欢迎于我讨论,也欢迎大家与我讨论!