24位真彩色图像转8位灰度图像

利用自动色阶原理,将遥感图象从16Bit映射到8bit     遥感图像每个通道的灰度值通常采用8bit存储,雷达影像则是用16bit进行存储。只有把16bit的灰度值(0-65535)转为8bit(0-255),才可以在屏幕上正常显示。直接映射对于灰度值在灰度范围内分布均匀图像的显示效果较好,但往往这样会使图像很暗,有时甚至分一片漆黑。借用了photoshop中的调整自动色阶的原理,将分布不均匀的图像色阶柱状图的两边切掉一些太黑或太白像素,可以显示较 阅读详情
/*************************************************************************

* 函数名称:Gray24Bits( )

* 函数类型:LPSTR

* 参数:    LPSTR lpDIB      - 指向源DIB图像指针

* 返回值:  BOOL            - 转换成功返回TRUE,否则返回FALSE。

* 函数功能:24位真彩色图像转8位灰度图像

*************************************************************************/
BOOL Gray24Bits(LPSTR lpDIB)
{
// 找到DIB图像象素起始位置
LPSTR  lpDIBBits; // 指向DIB象素指针
lpDIBBits =FindDIBBits(lpDIB);

LPBITMAPINFOHEADER lpDIBHdr; // 指向BITMAPINFOHEADER的指针
lpDIBHdr = (LPBITMAPINFOHEADER)lpDIB;

LPSTR lpGrayBits;

// 计算位图图的信息头、调色板和图形数据的大小, 并给灰度图分配内存
int dwInfo = lpDIBHdr->biSize;
int dwData = lpDIBHdr->biSizeImage;
    dwData=(lpDIBHdr->biHeight) * (lpDIBHdr->biWidth);
int dwGrayData = dwData/3;
int dwGrayPal = 256 * sizeof(RGBQUAD);
int sizeTotal=dwInfo+dwGrayPal+dwGrayData;       


// 创建灰度图的颜色表 
RGBQUAD* lpGrayRgbQuag=(RGBQUAD*)(lpDIB+lpDIBHdr->biSize);//指向内存中的灰度颜色表

int  rowLenSr=WIDTHBYTES(24*lpDIBHdr->biWidth);//行字节数
int  rowLenDes=WIDTHBYTES(8*lpDIBHdr->biWidth);
int  sizeGrayBits=rowLenDes*lpDIBHdr->biHeight;

int i;

if(24==lpDIBHdr->biBitCount)
{ 

lpDIBHdr->biSizeImage=sizeTotal;
lpDIBHdr->biBitCount=8;
lpDIBHdr->biClrUsed=256;

  for(i=0;i <256;i++)
  {
            lpGrayRgbQuag->rgbBlue=i;
            lpGrayRgbQuag->rgbGreen=i;
            lpGrayRgbQuag->rgbRed=i;
            lpGrayRgbQuag->rgbReserved=0;
  lpGrayRgbQuag++;//写入内存中的灰度颜色表
  }

}

//图像区转换
HGLOBAL hGray=(HGLOBAL)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT, sizeGrayBits);//分配内存
lpGrayBits = (LPSTR) ::GlobalLock(hGray);//内存数据指针

if (hGray==0)
{
  return false;  //内存分配失败则返回false
}

LPBYTE lpos=(LPBYTE)lpDIBBits;

BYTE nGray;
 
int x,y,z,m,pos;

for( y=0; y <lpDIBHdr->biHeight; y++ )
{
pos = 0;
pos = y*rowLenSr;
m  = 0;
m  = y*rowLenDes;
for( x=0,z=m; x <rowLenSr; x=x+3,z++)
{
        nGray = (BYTE)( lpos[pos+x]*0.114 + lpos[pos+x+1]*0.587 + lpos[pos+x+2]*0.299);
lpGrayBits[z] = (unsigned char) nGray;
}
}

memcpy(lpGrayRgbQuag,lpGrayBits,sizeGrayBits);
::GlobalUnlock( hGray );
return TRUE;
}
24位真彩色转换为8位灰度图片(完整代码) 阅读详情

相关推荐

Java实现24位真彩转换为8位灰度图片

Windows下的位图文件即我们通常所熟悉的BMP图片,其存储结构的格式可以在WINGDI.h文件中找到定义。BMP文件大体上分为四个部分: 1.      位图文件头(BITMAPFILEHEADER) 2.      位图信息头(BITMAPINFOHEADER) 3.      调色板(PALETTE) 4.      位图数据(IMAGEDATA) 根据颜色深度的不同,图像上的一

qdsclove的专栏 3696

matlab 将24位图转换为8位图,实现1位,4位,8位,24位BMP位图的互相转换的方法

BOOL SaveTrueBmp(HBITMAP hBitmap, CString FileName){//设备描述表HDC hDC;//真彩色位图中每象素所占字节数为24WORD wBitCount=24;//定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0,dwWritt...

weixin_39613744的博客 1683

数字图像基础(二进制图像、灰度图像、RGB图像、索引图像和多帧图像)

1、 图像的分类 根据图像的属性不同,图像分类的方法也不同。 ①从获取方式上图像分为拍摄类图像和绘制类图像; ②从颜色上图像分为彩色图像、灰度图像和黑白图像等; ③从内容上图像分为人物图像、风景图像等; ④从功能上图像又分为流程图、结构图、心电图、电路图和设计图等。 ⑤在数字图像处理领域,将图像分为模拟图像和数字图像两种,计算机处理的信号都是数字信号,所以在计算机上处理的图像均为数字图像。 ⑥根据数字图像在计算机中表示方法的不同,分为二进制图像、索引图像、灰度图像、RGB图像和多帧图像; ⑦根据计算机中图像

onlyfanlala的博客 1万+

机器视觉入门之路(十,8位灰度图像的加载显示(微软的魔法),c++对比c#)

8位图像存起来方便,显示起来是否也方便呢?显示出来让你大惊失色! 我们先加载,在cdib类中增加调色板: 第一,还记得(一)中最简版的cdib吗?那些删掉的和调色板相关要恢复过来 第二,第三次files.read(...)之后增加代码: if(!this->CreatePalette ()) { Free(); return false; } 第三,bool CDib::CreatePalette () { if(this->m_B...

ganggangwawa的博客 671

24位真彩色转换为8位灰度图_VC++_代码资料.pdf

。

牛顿法vs高斯牛顿法vs LM算法:三行代码说清核心区别(附性能对比表格)

本文通过对比牛顿法、高斯牛顿法和LM算法的核心迭代代码,揭示了三者在非线性最小二乘优化中的本质区别。LM算法通过引入阻尼因子,在高斯牛顿法的快速收敛与梯度下降的稳定性之间取得平衡,成为工程实践中鲁棒性最强的首选。文章还提供了清晰的性能对比表格,帮助开发者根据初始估计和问题性质快速选择合适算法。

weixin_29062255的博客 419

labelme 标注生成24位深图像转换为8位 彩色

但分割模型要求标签label(mask)是8位彩图或灰度图用程序进行转换这个程序输入必须是一张包含所有类别的图像,称之为先锋图像,这样转换后的像素只有图像中的颜色数目,而不会出现多余的颜色转换后的测试代码,因为本人做的三分类,加背景,转换后的应该只有四个类别,四个像素结果为问题总结:1 . 在跑bubbliiiing博客中pspnet训练自己的数据集中出现的损失不下降,Accuracy为100,mIOU不增长的问题也是标签文件转换的问题。

m0_57782802的博客 1017

光学设计必知:Ansys Zemax中6种系统孔径类型的适用场景全解析

本文深入解析Ansys Zemax中6种系统孔径类型的适用场景,包括入瞳直径、像方空间F/#、物方空间NA等,帮助光学设计师精准控制光线选择和成像质量。通过实际案例和代码示例,详细讲解各孔径类型的计算原理、参数设置及在显微系统、激光扩束等场景中的优化策略,提升复杂光学系统设计效率。

weixin_29266007的博客 551

图像编程学习笔记4——24位真彩色转换为灰度图像

以下文本内容来自http://zhidao.baidu.com/question/152910968.html中的部分内容 把RGB值转换为灰度值的公式:Gray := Trunc(0.3 * Red + 0.59 * Green + 0.11 * Blue);//这句用的是浮点运算在图像处理中,速度就是生命,能不用浮点运算,就最好不要用!Gray...

SurpassLi的专栏 83

LLC同步整流实战:从驱动时序到调试仿真,效率提升与避坑指南

同步整流技术是提升开关电源效率的关键手段,尤其在LLC谐振变换器中,通过低导通电阻MOSFET替代二极管可显著降低副边整流损耗。然而,驱动时序、电流过零检测及轻载模式切换是工程实践中的核心难点。从Vds检测原理到死区调节,再到仿真与实测验证,工程师需掌握完整的调试方法论。该技术广泛应用于通信电源、服务器电源及车载DC/DC,合理设计LLC同步整流方案能实现满载效率提升约1.8个百分点,同时优化热分布。本文以600W半桥LLC样机为线索,深入分析工作模态、驱动芯片选型、波形判断与仿真模型搭建,为电源设计提供可

weixin_29165465的博客 295

PLC编程进阶:结构体(UDT)与功能块(FB)的模块化实践指南

本文深入探讨了PLC编程中实现模块化的核心方法,重点解析了结构体(UDT)与功能块(FB)的协同应用。通过将零散数据封装为UDT,并将控制逻辑打包为可复用的FB,能够构建出结构清晰、易于维护和调试的PLC程序。文章结合拧紧枪、电机控制等实战案例,提供了从设计原则到分层架构的完整实践指南,旨在帮助工程师将混乱的‘面条式’代码改造为高效的‘正规军’。

s3t4u的博客 220

【数字图像】C++8位和24位BMP位图的平滑、锐化、二值化处理,以及24位真彩图的灰度化

由于8位和24位BMP的像素存储方式不同,所以不能用相同的函数对位图进行处理,因此我设计了两个类分别处理8位和24位BMP。 程序运行时,首先提示输入位图深度。 然后输入位图名称。 程序会输出位图的文件头和信息头。 对于8位位图,程序提示选择下列处理方式: 1.平滑处理 2.4邻域锐化 3.8邻域锐化 4.二值化 选择处理方式后,程序提示输入要保存的位图名称。然后返回是否成功处理的信息。 对于24位位图,程序提示选择下列处理方式: 1.平滑处理 2

widiot的博客 8294

华为OD机试双机位C卷:字符串计数匹配 (C/C++/Py/Java/Js/Go)

华为OD机试双机位C卷 字符串计数匹配,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。 华为OD机试 字符串计数匹配, 华为OD上机考试 - 字符串计数匹配。

qq_45776114的博客 1647

使用GDI+将24位真彩色图像转换为8位灰度图像

在图像处理中,我们经常需要将真彩色图像转换为黑白图像。严格的讲应该是灰度图,因为真正的黑白图像是二色,即只有纯黑,纯白二色。开始之前,我们先简单补充一下计算机中图像的表示原理。计算机中的图像大致可以分成两类:位图(Bitmap)和矢量图(Metafile)。位图可以视为一个二维的网格,整个图像就是由很多个点组成的,点的个数等于位图的宽乘以高。每个点被称为一个像素点,每个像素点有确定的颜色,当很多个

GTB 的专栏 2190

python ERA-5气象数据NetCDF格式解析(一)

python ERA-5气象数据NetCDF格式解析

weixin_43896283的博客 2638

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

24位真彩图转8位灰度图

实现了24位真彩图转8位灰度图的基本功能,不过只是为了实现功能,并没有进行错误处理等,仅供大家一点参考 #include #include #include /* typedef struct tagBITMAPFILEHEADER {     WORD bfType; // 位图文件的类型,必须为BM(1-2字节)     DWORD bfSize;

小菜鸟的起飞之路 2909

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

8位, 16位,24位,32位图片显示原理及对比、读自己的mask、判断是否为灰度图

一、8位, 16位,24位,32位图片显示原理及对比 我们都知道一张图片可以保存为很多种不同的格式,比如bmp/png/jpeg/gif等等。这个是从文件格式的角度看,我们抛开文件格式,看图片本身,我们可以分为8位, 16位, 24位, 32位等。 单击右键,属性->详细信息即可查看图片位深度\color{red}{图片位深度}图片位深度: 8位: 2^8 = 2^2(B) 2^3(G) 2^3® = 256 (256色) 可以总共显示256种颜色 16位: 2^16 = 2^5(B) 2

m0_46378271的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

彩色图像、灰度图像与黑白图像的区别

一、彩色图像 彩色图像是指图像中的每个像素都分成R、G、B三个基色分量,每个基色分量直接决定其基色的强度,这样产生的色彩称为真彩色,因此彩色图像有3个通道。例如图像深度为24,用R:G:B=8:8:8来表示色彩,则R、G、B各占用8位来表示各自基色分量的强度,每个基色分量的强度等级为2^8=256种。图像可容纳2^24=16M种色彩(24位色)。24位色被称为真彩色,它可以达到人眼分辨的极限,发色数是1677万多色,也就是2的24次方。但32位色就并非是2的32次方的发色数,它其实也是1677万多..

gaoxueyi551的专栏 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

8位灰度图像BMP的保存

https://blog.youkuaiyun.com/g200407331/article/details/52540478在图像处理中,我们经常需要将真彩色图像转换为黑白图像。严格的讲应该是灰度图,因为真正的黑白图像是二色,即只有纯黑,纯白二色。开始之前,我们先简单补充一下计算机中图像的表示原理。计算机中的图像大致可以分成两类:位图(Bitmap)和矢量图(Metafile)。 位图可以视为一个二维的网格...

orchestra56的博客 8036

24位真彩色转为256灰度图

************************************************************************* * * 函数名称: * ConvertToGrayScale() * * 参数: * LPSTR lpDIB - ???ò??DIB???????? * * 返回值: * BOOL - 成功返回TRUE,否则FALSE * * 说明: * 将24位真彩色转为256灰度图像 **************

cherryli007的专栏 1353

将24位真彩色图转换为8位灰度图片

/** * 程序名: Convert.cpp * 功  能: 将24位真彩色图转换为8位灰度图片 *  测试图片test1.bmp放到工程目录下 */ #include #include #include #include using namespace std; BITMAPFILEHEADER bmpFileHeader; //位图文件头 BITMAPINFOHE

u013146742的博客 4527

24位真彩图转8位灰度图并分解位平面 c-c++实现

上一篇博客里写到了24位真彩图转八位灰度图的方法,这一篇博客是在上个代码的基础上,添加了分解灰度图8个位平面的功能。 #include #include #include #include #include using namespace std; /* typedef struct tagBITMAPFILEHEADER { WORD bfType; // 位图文件的类型,必

小菜鸟的起飞之路 3096
上一篇: Windows位图和调色板
下一篇: 指针参数传递内存的方法
ccfboy
博客等级 码龄18年 45粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值