直方图修正和彩色变换

直方图修正和彩色变换

ID:25817236

大小:133.50 KB

页数:24页

时间:2018-11-22

直方图修正和彩色变换_第1页
直方图修正和彩色变换_第2页
直方图修正和彩色变换_第3页
直方图修正和彩色变换_第4页
直方图修正和彩色变换_第5页
资源描述:

《直方图修正和彩色变换》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、跟我学图象处理编程--直方图修正和彩色变换第五章直方图修正和彩色变换这一章,我们主要和调色板打交道。先从最简单的反色讲起。1.反色(invert)反色就是形成底片效果。如下图所示,图2为图1反色后的结果图1.原图图2.图1反色后的结果反色有时是很有用的,比如说,图1中黑色区域占绝大多数,这样打印起来很费墨,我们可以先进行反色处理再打印。反色的实际含义是将R,G,B值反转。若颜色的量化级别是256,则新图的R,G,B值为255减去原图的R,G,B值。这里针对的是所有图,包括真彩图,带调色板的彩色图(又称为伪彩色图),和灰度图。

2、针对不同种类有不同的处理。先看看真彩图。我们知道真彩图不带调色板,每个像素用3个字节,表示R,G,B三个分量。所以处理很简单,把反转后的R,G,B值写入新图即可。再来看看带调色板的彩色图,我们知道位图中的数据只是对应调色板中的一个索引值,我们只需要将调色板中的颜色反转,形成新调色板,而位图数据不用动,就能够实现反转。灰度图是一种特殊的伪彩色图,只不过调色板中的R,G,B值都是一样的而已。所以反转的处理和上面讲的一样。这里,我想澄清一个概念。过去我们讲二值图时,一直都说成黑白图。二值位图一定是黑白的吗?答案是不一定。我们安装W

3、indows95时看到的那幅setup.bmp是由蓝色和黑色组成的,但它实际上是二值图。原来,它的调色板中的两种颜色是黑与蓝,而不是黑与白。所以说二值图也可以是彩色的,只不过一般情况下是黑白图而已。下面的程序实现了反色,注意其中真彩图和调色板位图处理时的差别。BOOLInvert(HWNDhWnd){DWORDBufSize;LPBITMAPINFOHEADERlpImgData;LPSTRlpPtr;HLOCALhTempImgData;LPBITMAPINFOHEADERlpTempImgData;LPSTRlpTemp

4、Ptr;HDChDc;HFILEhf;LONGx,y;LOGPALETTE*pPal;HPALETTEhPrevPalette=NULL;HLOCALhPal;DWORDi;unsignedcharRed,Green,Blue;第24页跟我学图象处理编程--直方图修正和彩色变换BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);//新开缓冲区的大小if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL){MessageBox(hWnd,"Errora

5、llocmemory!","ErrorMessage",MB_OK

6、MB_ICONEXCLAMATION);returnFALSE;}lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTempImgData);//拷贝头信息memcpy(lpTempImgData,lpImgData,BufSize);hDc=GetDC(hWnd);if(NumColors!=0){//NumColo

7、rs不为0说明是带调色板的lpPtr=(char*)lpImgData+sizeof(BITMAPINFOHEADER);//指向原图数据lpTempPtr=(char*)lpTempImgData+sizeof(BITMAPINFOHEADER);//指向新图数据//为新调色板分配内存hPal=LocalAlloc(LHND,sizeof(LOGPALETTE)+NumColors*sizeof(PALETTEENTRY));pPal=(LOGPALETTE*)LocalLock(hPal);pPal->palNumEnt

8、ries=(WORD)NumColors;pPal->palVersion=0x300;for(i=0;ipalPalEntry[i].peRed=(BYTE)(255-Red);pPal->palPalEntry[i].peGreen=(BYTE)(

9、255-Green);pPal->palPalEntry[i].peBlue=(BYTE)(255-Blue);pPal->palPalEntry[i].peFlags=0;*(lpTempPtr++)=(unsignedchar)(255-Blue);*(lpTempPtr++)=(un

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。