如何将24位位图转换为4位、2位和1位位图? 24位图到4位、2位、1位图之间的转换算法是怎么样的?希望大侠们赐教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 4bits,2bits,1bit?只能是灰度位图吧。根据RGB求得对应点的亮度,再转换成4bits,2bits or 1bit. 根据每个像素的rbg值求出亮度值,重采样成4bits,2bits,1bit.这样的图片作图像识别? DentistryDoctor:当然不仅仅是灰度图了。Do you see microsoft's painter, it can save a 24bit image to 16colors(4bit) image, but we can find the image isn't gray scale image.I think the way you offered just convert a image to gray scale, it isn't my need. 位图其实很简单:x*y*h,长*宽*像素深度。所以写程序的话就是对每个象素处理,如果是24位,rgb -> yuv,有好几个经验公式,转出来y是灰度,8位的,左移4位就是4位的了,呵呵。当然,怎么转是你自己定。 那就是 调色板 技术了... 4bit 2bit 就不是灰度,而是调色板的索引。调色板里是RGB[16]这个意思,是什么RGB就看算法和需求了。 楼上有位兄弟说的,1. 先确定16个RGB,方法可以是统计图像,得到最多的16个RGB,或者你用最小二乘什么的,得到16个RGB。2. 对于每个象素,确定其靠近哪个 RGB(上面的16个),就是这个象素的索引。靠近就是三维的距离等等。如何? 还有一种感觉是 模式识别里面的分类分16类 4类 2类,每类的RGB取平均或者最小均方。怎么分就记不得了,好像贝叶斯、神经网络什么的。理论,so 强大 1bit不就是二值图.只能用颜色索引格式.不然得不到色彩. 楼上的,如果是1bit,用不了颜色索引格式吧 1. 先确定16个RGB,方法可以是统计图像,得到最多的16个RGB,或者你用最小二乘什么的,得到16个RGB。2. 对于每个象素,确定其靠近哪个 RGB(上面的16个),就是这个象素的索引。靠近就是三维的距离等等。差不多就是这样,不过24位位图转过来的话,颜色信息会丢失得很严重,就不要指望能有什么好的效果了。 <<programing windows>>中有源码. http://www-scf.usc.edu/~flv/ipbook/chap05.htm这个是真彩色转256的他用的是最小平方误差来取近似颜色//其余的颜色依据最小平方误差近似为前256中最接近的一种 if (PalCounts > 256){ for (i = 256; i < PalCounts; i++){ //ColorError1记录最小平方误差,一开始赋一个很大的值 ColorError1=1000000000;//由12位索引值得到R,G,B的最高4位值 Blue = (long)((ColorIndex[i] & 0xf00) >> 4); Green = (long)((ColorIndex[i] & 0x0f0)); Red = (long)((ColorIndex[i] & 0x00f) << 4); ClrIndex = 0; for (j = 0; j < 256; j++){ //ColorError2计算当前的平方误差 ColorError2=(long)(Blue-pPal->palPalEntry[j].peBlue)*(Blue-pPal->palPalEntry[j].peBlue)+ (long)(Green-pPal->palPalEntry[j].peGreen)*(Green-pPal->palPalEntry[j].peGreen)+ (long)(Red-pPal->palPalEntry[j].peRed)*(Red-pPal->palPalEntry[j].peRed); if (ColorError2 < ColorError1){ //找到更小的了 ColorError1 = ColorError2; ClrIndex = j; //记录对应的调色板的索引值 } } MFC 文件名最长是多少呢? 怎么用编辑框输出 exe文件在别人的电脑里却无法运行,说什么库没有注册 List Control问题 有谁知道在widnows编程里面如何加载html资源么! 关于listctrl的问题,解决的另外开贴给分 如何得到字体的宽度 请教如何画点.谢谢 关于编程思路的问题 问个关于*号和mul 基于单文档的多对话框同时显示
根据RGB求得对应点的亮度,再转换成4bits,2bits or 1bit.
这样的图片作图像识别?
当然不仅仅是灰度图了。
Do you see microsoft's painter, it can save a 24bit image to 16colors(4bit) image, but we can find the image isn't gray scale image.
I think the way you offered just convert a image to gray scale, it isn't my need.
2. 对于每个象素,确定其靠近哪个 RGB(上面的16个),就是这个象素的索引。靠近就是三维的距离等等。如何?
2. 对于每个象素,确定其靠近哪个 RGB(上面的16个),就是这个象素的索引。靠近就是三维的距离等等。差不多就是这样,不过24位位图转过来的话,颜色信息会丢失得很严重,就不要指望能有什么好的效果了。
这个是真彩色转256的
他用的是最小平方误差来取近似颜色
//其余的颜色依据最小平方误差近似为前256中最接近的一种 if (PalCounts > 256){ for (i = 256; i < PalCounts; i++){ //ColorError1记录最小平方误差,一开始赋一个很大的值 ColorError1=1000000000;//由12位索引值得到R,G,B的最高4位值 Blue = (long)((ColorIndex[i] & 0xf00) >> 4); Green = (long)((ColorIndex[i] & 0x0f0)); Red = (long)((ColorIndex[i] & 0x00f) << 4); ClrIndex = 0; for (j = 0; j < 256; j++){ //ColorError2计算当前的平方误差 ColorError2=(long)(Blue-pPal->palPalEntry[j].peBlue)*(Blue-pPal->palPalEntry[j].peBlue)+ (long)(Green-pPal->palPalEntry[j].peGreen)*(Green-pPal->palPalEntry[j].peGreen)+ (long)(Red-pPal->palPalEntry[j].peRed)*(Red-pPal->palPalEntry[j].peRed); if (ColorError2 < ColorError1){ //找到更小的了 ColorError1 = ColorError2; ClrIndex = j; //记录对应的调色板的索引值 } }