首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

C++图像锐化处理解决思路

2013-01-26 
C++图像锐化处理int widthm_bmInfoHeader.biWidthint heightm_bmInfoHeader.biHeightint nLineBytesm

C++图像锐化处理
int width=m_bmInfoHeader.biWidth;
int height=m_bmInfoHeader.biHeight;
int nLineBytes=m_bmInfoHeader.biWidth*m_bmInfoHeader.biBitCount/8;
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)//真彩色位图每个像素需要3个字节表示其颜色
{
int nRed1,nGreen1,nBlue1,nRed2,nGreen2,nBlue2;
BYTE *pTmpData=m_pBmpData+nLineBytes*i+j;
BYTE *pNextData=m_pBmpData+nLineBytes*(i+1)+j+3;
nRed1=pTmpData[2];
nGreen1=pTmpData[1];
nBlue1=pTmpData[0];
COLORREF color=RGB(nRed1,nGreen1,nBlue1);
nRed1=(color&0xFF);
nGreen1=(int)(color&62580)/256;
nBlue1=(int)(color&0xFF0000)/65536;
//获取下一个像素颜色
nRed2=pNextData[2];
nGreen2=pNextData[1];
nBlue2=pNextData[0];
COLORREF clNext=RGB(nRed2,nGreen2,nBlue2);
nRed2=(clNext&0xFF);
nGreen2=(int)(clNext&62580)/256;
nBlue2=(int)(clNext&0xFF0000)/65536;
nRed1+=(nRed1-nRed2)/2;
nGreen1+=(nGreen1-nGreen2)/2;
nBlue1+=(nBlue1-nBlue2)/2;
if(nRed1>255)
nRed1=255;
if(nRed1<0)
nRed1=0;

if(nGreen1>255)
nGreen1=255;
if(nGreen1<0)
nGreen1=0;

if(nBlue1>255)
nBlue1=255;
if(nBlue1<0)
nBlue1=0;
pTmpData[0]=nBlue1;
pTmpData[1]=nGreen1;
pTmpData[2]=nRed1;
}
这段代码是图像锐化处理,查了一些资料,没弄懂它是根据什么原理 来处理的 。曾经以为是普拉斯锐化,发现不太像 ,哪位高手帮忙掉点一二
[解决办法]
nRed1+=(nRed1-nRed2)/2;
nGreen1+=(nGreen1-nGreen2)/2;
nBlue1+=(nBlue1-nBlue2)/2;
从这3行代码来看应该是在锐化,2个相近点的色差越大增量越大。

热点排行