亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 圖像處理.txt

?? 用數字圖像處理主要是為了修改圖形,改善圖像質量,或是從圖像中提起有效信息,還有利用數字圖像處理可以對圖像進行體積.
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
第五講 直方圖修正和彩色變換

    這一講,我們主要和調色板打交道。先從最簡單的反色講起。

1. 反色(invert)

    反色就是形成底片效果。如下圖所示,圖2為圖1反色后的結果

                  

圖1. 原圖

                  

圖2. 圖1反色后的結果

反色有時是很有用的,比如說,圖1中黑色區域占絕大多數,這樣打印起來很費墨,我們可以先進行反色處理再打印。反色的實際含義是將R,G,B值反轉。若顏色的量化級別是256,則新圖的R,G,B值為255減去原圖的R,G,B值。這里針對的是所有圖,包括真彩圖,帶調色板的彩色圖(又稱為偽彩色圖),和灰度圖。針對不同種類有不同的處理。

先看看真彩圖。我們知道真彩圖不帶調色板,每個像素用3個字節,表示R,G,B三個分量。所以處理很簡單,把反轉后的R,G,B值寫入新圖即可。再來看看帶調色板的彩色圖,我們知道位圖中的數據只是對應調色板中的一個索引值,我們只需要將調色板中的顏色反轉,形成新調色板,而位圖數據不用動,就能夠實現反轉。灰度圖是一種特殊的偽彩色圖,只不過調色板中的R,G,B值 都是一樣的而已。所以反轉的處理和上面講的一樣。

這里,我想澄清一個概念。過去我們講二值圖時,一直都說成黑白圖。二值位圖一定是黑白的嗎?答案是不一定。我們安裝Windows95時看到的那幅setup.bmp是由藍色和黑色組成的,但它實際上是二值圖。原來,它的調色板中的兩種顏色是黑與藍,而不是黑與白。所以說二值圖也可以是彩色的,只不過一般情況下是黑白圖而已。

下面的程序實現了反色,注意其中真彩圖和調色板位圖處理時的差別。

BOOL Invert(HWND hWnd)

{

    DWORD                BufSize;

    LPBITMAPINFOHEADER lpImgData;

    LPSTR                 lpPtr;

    HLOCAL               hTempImgData;

    LPBITMAPINFOHEADER lpTempImgData;

    LPSTR                 lpTempPtr;

    HDC                   hDc;

    HFILE                 hf;

    LONG                 x,y;

    LOGPALETTE          *pPal;

    HPALETTE             hPrevPalette=NULL; 

    HLOCAL              hPal;

    DWORD               i;

    unsigned char           Red,Green,Blue;

 

    BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER); //新開緩沖區的大小

    if((hTempImgData=LocalAlloc(LHND,BufSize))==NULL)

    {

        MessageBox(hWnd,"Error alloc memory!","Error 

Message",MB_OK|

MB_ICONEXCLAMATION);

return FALSE;

        }

    lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgDa

ta);    

    lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTe

mpImgData);

    //拷貝頭信息

    memcpy(lpTempImgData,lpImgData,BufSize);

 

    hDc=GetDC(hWnd);

    if(NumColors!=0){ //NumColors不為0說明是帶調色板的

    lpPtr=(char 

*)lpImgData+sizeof(BITMAPINFOHEADER); //指向原圖數據

        lpTempPtr=(char 

*)lpTempImgData+sizeof(BITMAPINFOHEADER); //指向新圖數據

    //為新調色板分配內存

    hPal=LocalAlloc(LHND,sizeof(LOGPALETTE) + 

NumColors* 

sizeof(PALETTEENTRY));

        pPal =(LOGPALETTE *)LocalLock(hPal);

        pPal->palNumEntries =(WORD) NumColors;

        pPal->palVersion    = 0x300;

        for (i = 0; i < NumColors; i++) {

            Blue=(unsigned char )(*lpPtr++);

            Green=(unsigned char )(*lpPtr++);

            Red=(unsigned char )(*lpPtr++);

            lpPtr++;

            //反轉調色板中的顏色,存入新的調色板

            pPal->palPalEntry[i].peRed=(BYTE)(255-Red);

            pPal->palPalEntry[i].peGreen=(BYTE)(255-Green);

            pPal->palPalEntry[i].peBlue=(BYTE)(255-Blue);

            pPal->palPalEntry[i].peFlags=0;

            *(lpTempPtr++)=(unsigned char)(255-Blue);

            *(lpTempPtr++)=(unsigned char)(255-Green);

            *(lpTempPtr++)=(unsigned char)(255-Red);

            *(lpTempPtr++)=0;

        }

 

        if(hPalette!=NULL)                     

            DeleteObject(hPalette);

        hPalette=CreatePalette(pPal); //產生新的調色板

        LocalUnlock(hPal);

        LocalFree(hPal);

        if(hPalette){

            hPrevPalette=SelectPalette(hDc,hPalette,FALSE);

            RealizePalette(hDc);

        }

    }

    else{ //不帶調色板,說明是真彩色圖

        for(y=0;y<bi.biHeight;y++){

            lpPtr=(char *)lpImgData+(BufSize-LineBytes-

y*LineBytes);

            lpTempPtr=(char *)lpTempImgData+(BufSize-

LineBytes-y*LineBytes);

            for(x=0;x<bi.biWidth;x++){

                Blue=(unsigned char )(*lpPtr++);

                Green=(unsigned char )(*lpPtr++);

                Red=(unsigned char )(*lpPtr++);

            //反轉位圖數據中的顏色,存入新的位圖數據中

                *(lpTempPtr++)=(unsigned char)(255-Blue);

                *(lpTempPtr++)=(unsigned char)(255-Green);

                *(lpTempPtr++)=(unsigned char)(255-Red);

            }

        }

    }

    if(hBitmap!=NULL)

        DeleteObject(hBitmap);

hBitmap=CreateDIBitmap(hDc,

    (LPBITMAPINFOHEADER)lpTempImgData, 

                          (LONG)CBM_INIT,

              

(LPSTR)lpTempImgData+sizeof(BITMAPINFOHEADE

R) +

  NumColors*sizeof(RGBQUAD),

                  

(LPBITMAPINFO)lpTempImgData, DIB_RGB_COLORS);

    if(hPalette && hPrevPalette){

        SelectPalette(hDc,hPrevPalette,FALSE);

        RealizePalette(hDc);

    }

    hf=_lcreat("c:\\invert.bmp",0);

    _lwrite(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 

    _lwrite(hf,(LPSTR)lpTempImgData,BufSize);

    _lclose(hf);

    //釋放內存和資源

    ReleaseDC(hWnd,hDc);

    LocalUnlock(hTempImgData);

    LocalFree(hTempImgData);

    GlobalUnlock(hImgData);

    return TRUE;

}

 

2. 彩色圖轉灰度圖(color to grayscale) 

我們在第二講時提到了YUV的顏色表示方法,知道在這種表示方法中,Y分量的物理含義就是亮度,它含了灰度圖的所有信息,只用Y分量就完全能夠表示出一幅灰度圖來。YUV和RGB之間有著如下的對應關系 
我們利用上式,根據R,G,B的值求出Y值后,將R,G,B值都賦值成Y,就能表示出灰度圖來,這就是彩色圖轉灰度圖的原理。

先看看真彩圖。我們知道真彩圖不帶調色板,每個像素用3個字節,表示R,G,B三個分量。所以處理很簡單,根據R,G,B的值求出Y值后,將R,G,B值都賦值成Y,寫入新圖即可。再來看看帶調色板的彩色圖,我們知道位圖中的數據只是對應調色板中的一個索引值,我們只需要將調色板中的彩色變成灰度,形成新調色板,而位圖數據不用動,就可以了。

下面的程序實現了彩色圖到灰度圖的轉換,注意其中真彩圖和調色板位圖處理時的差別。

BOOL ColortoGrayScale(HWND hWnd)

{

    DWORD               

SrcBufSize,DstBufSize,DstLineBytes;

    LPBITMAPINFOHEADER lpImgData;

    LPSTR                 lpPtr;

    HLOCAL               hTempImgData;

    LPBITMAPINFOHEADER lpTempImgData;

    LPSTR                 lpTempPtr;

    HDC                   hDc;

    HFILE                  hf;

    LONG                  x,y;

    BITMAPFILEHEADER    DstBf;

    BITMAPINFOHEADER    DstBi;

    LOGPALETTE           *pPal;

    HPALETTE              hPrevPalette; 

    HLOCAL               hPal;

    DWORD                  NewNumColors;

    WORD                   NewBitCount;

    float                   Y;

    DWORD                i;

    unsigned char            Red,Green,Blue,Gray;

 

    NewNumColors=NumColors; //NewNumColors為新圖的顏色數

    NewBitCount=bi.biBitCount;  //NewBitCount為新圖的顏色位數

    if(NumColors==0) //真彩圖

    {

        NewNumColors=256;

        NewBitCount=8;

    }

//由于顏色位數有可能發生了改變,所以要重新計算每行占用的字節數以及新圖

//的緩沖區大小

    DstLineBytes=(DWORD)WIDTHBYTES(bi.biWidth*NewBit

Count);

    DstBufSize=(DWORD)(sizeof(BITMAPINFOHEADER)+Ne

wNumColors*

sizeof(RGBQUAD)+(DWORD)DstLineBytes*bi.bi

Height);

    //DstBf和DstBi為新的BITMAPFILEHEADER和

BITMAPINFOHEADER

    //拷貝原來的頭信息

    memcpy((char *)&DstBf,(char 

*)&bf,sizeof(BITMAPFILEHEADER));

    memcpy((char *)&DstBi,(char 

*)&bi,sizeof(BITMAPINFOHEADER));

    //做必要的改變

    DstBf.bfSize=DstBufSize+sizeof(BITMAPFILEHEADER);

    DstBf.bfOffBits=(DWORD)(NewNumColors*sizeof(RGBQUAD)+

sizeof(BITMAPFILEHEADER)    +sizeof(BITMAPINFOHEADER));

    DstBi.biClrUsed=0;

    DstBi.biBitCount=NewBitCount;

    //原圖的緩沖區的大小

    SrcBufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);

    if((hTempImgData=LocalAlloc(LHND,DstBufSize))==NULL)

    {

            MessageBox(hWnd,"Error alloc memory!","Error 

Message",MB_OK|

MB_ICONEXCLAMATION);

        return FALSE;

    }

    lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgDa

ta);    

    lpTempImgData=(LPBITMAPINFOHEADER)LocalLock(hTe

mpImgData);

//拷貝頭信息和位圖數據

    memcpy(lpTempImgData,lpImgData,DstBufSize);

    //用新的BITMAPINFOHEADER替換原來的頭信息

    memcpy(lpTempImgData,(char 

*)&DstBi,sizeof(BITMAPINFOHEADER));

    //lpPtr指向原圖的數據

    lpPtr=(char *)lpImgData+sizeof(BITMAPINFOHEADER);

    //lpTempPtr指向新圖的數據

    lpTempPtr=(char 

*)lpTempImgData+sizeof(BITMAPINFOHEADER);

//為新的調色板分配內存

hPal=LocalAlloc(LHND,sizeof(LOGPALETTE) + 

NewNumColors

* sizeof(PALETTEENTRY));

    pPal =(LOGPALETTE *)LocalLock(hPal);

    pPal->palNumEntries =(WORD) NewNumColors;

    pPal->palVersion    = 0x300;

    if(NumColors==0) //真彩色

        for (i = 0; i < 256; i++) { //灰度從(0,0,0)到(255,255,255)

            pPal->palPalEntry[i].peRed=(BYTE)i;

            pPal->palPalEntry[i].peGreen=(BYTE)i;

            pPal->palPalEntry[i].peBlue=(BYTE)i;

            pPal->palPalEntry[i].peFlags=(BYTE)0;

            *(lpTempPtr++)=(unsigned char)i;

            *(lpTempPtr++)=(unsigned char)i;

            *(lpTempPtr++)=(unsigned char)i;

            *(lpTempPtr++)=0;

        }

    else 

        for (i = 0; i < NewNumColors; i++) { //帶調色板的彩色圖

            Blue=(unsigned char )(*lpPtr++);

            Green=(unsigned char )(*lpPtr++);

            Red=(unsigned char )(*lpPtr++);

            Y=(float)(Red*0.299+Green*0.587+Blue*0.114);

            Gray=(BYTE)Y;

            lpPtr++;

            //從原來的調色板中的顏色計算得到Y值,寫入新的調色板

            pPal->palPalEntry[i].peRed=Gray;

            pPal->palPalEntry[i].peGreen=Gray;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线国产观看| 99久久久久免费精品国产| 中文字幕欧美日韩一区| 欧美视频自拍偷拍| 国产激情一区二区三区桃花岛亚洲| 亚洲伦理在线免费看| 日韩西西人体444www| 99久久国产综合精品色伊| 奇米精品一区二区三区四区| 亚洲欧美中日韩| 欧美成人一区二区三区在线观看| 色综合天天综合在线视频| 精品无人区卡一卡二卡三乱码免费卡| **性色生活片久久毛片| 精品日韩在线观看| 精品视频一区二区不卡| 成人自拍视频在线| 美女在线视频一区| 亚洲在线一区二区三区| 国产欧美精品国产国产专区| 欧美日韩夫妻久久| 91热门视频在线观看| 国产高清精品久久久久| 日韩精品久久久久久| 亚洲免费电影在线| 中文字幕一区二区三中文字幕| 日韩欧美国产小视频| 欧美影院午夜播放| 91影院在线免费观看| 国产一区二区不卡在线| 免费不卡在线视频| 视频一区国产视频| 夜夜精品视频一区二区| 国产精品国产三级国产| 欧美激情中文字幕一区二区| 久久综合999| 日韩免费电影一区| 91精品国产综合久久久久久久| 色狠狠一区二区| 色综合欧美在线视频区| www.欧美色图| 不卡的电影网站| 不卡在线视频中文字幕| 成人av网站免费| av在线一区二区三区| 不卡一卡二卡三乱码免费网站| 成人午夜私人影院| 成人免费视频国产在线观看| 国产成人av影院| 成人手机在线视频| 成人网在线免费视频| 成人av电影在线网| 不卡影院免费观看| 色婷婷av一区二区三区之一色屋| 在线看国产一区二区| 欧美亚洲国产一区二区三区| 欧美日韩一区二区三区高清| 欧美少妇一区二区| 在线播放91灌醉迷j高跟美女| 制服视频三区第一页精品| 这里只有精品电影| 在线亚洲一区观看| 欧美三级中文字幕在线观看| 色综合久久精品| 国产精品亚洲午夜一区二区三区| 精久久久久久久久久久| 丝袜国产日韩另类美女| 亚洲三级在线观看| 九九精品一区二区| 亚洲乱码国产乱码精品精小说 | 日本伊人精品一区二区三区观看方式 | 免费不卡在线视频| 精品一区二区久久| 国产精品一区在线观看你懂的| 国产成人亚洲综合色影视| 成人开心网精品视频| 91免费观看视频在线| 欧美人成免费网站| 2023国产精华国产精品| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲欧洲成人自拍| 日本午夜一本久久久综合| 国产一区二区0| 91麻豆国产自产在线观看| 欧美三级在线看| 久久久久国产一区二区三区四区| 国产精品每日更新在线播放网址| 一区二区三区四区蜜桃| 欧美bbbbb| 99精品在线免费| 91麻豆精品国产自产在线| 久久久三级国产网站| 亚洲狠狠丁香婷婷综合久久久| 美女网站色91| 91丨九色丨尤物| 欧美电影免费提供在线观看| 亚洲人成伊人成综合网小说| 麻豆精品在线看| 色综合天天性综合| 精品日韩在线观看| 亚洲午夜激情av| 成人av网站大全| 精品久久免费看| 亚洲国产一区二区视频| 国产成人在线观看| 555夜色666亚洲国产免| 亚洲视频在线一区二区| 精品午夜久久福利影院| 欧美男同性恋视频网站| 亚洲男人天堂av网| 国产一区二区日韩精品| 精品婷婷伊人一区三区三| 国产欧美一区二区精品秋霞影院 | av电影在线观看完整版一区二区| 日韩一区二区三区视频在线 | 亚洲午夜久久久久久久久电影院| 成人激情免费视频| 国产亚洲午夜高清国产拍精品 | 亚洲综合图片区| 成人综合婷婷国产精品久久| 精品国产91亚洲一区二区三区婷婷| 亚洲精品国久久99热| 日韩电影一二三区| 韩国精品免费视频| 99国产精品视频免费观看| 欧美成人精品3d动漫h| 秋霞成人午夜伦在线观看| 日韩欧美在线观看一区二区三区| 一区二区三区日韩欧美| 亚洲亚洲人成综合网络| 日韩美一区二区三区| ...中文天堂在线一区| 激情偷乱视频一区二区三区| 国产欧美日韩久久| 亚洲v中文字幕| 播五月开心婷婷综合| 白白色亚洲国产精品| 精品精品欲导航| 日韩国产欧美在线观看| 91免费视频网| 日韩美女久久久| 国产91精品久久久久久久网曝门| 91精品国产综合久久精品麻豆| 五月综合激情日本mⅴ| 99国产精品久久久久久久久久久| 国产视频一区二区在线观看| 麻豆国产精品777777在线| 91福利在线播放| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久69国产一区二区蜜臀| 欧美日韩精品一区二区| 亚洲一区二区三区影院| 一本到三区不卡视频| 国产精品不卡一区二区三区| 成人一级片在线观看| 久久久久高清精品| 午夜精品久久久久影视| 9191国产精品| 日韩制服丝袜先锋影音| 欧美乱妇15p| 亚洲综合av网| 91福利国产成人精品照片| 国产日韩欧美激情| av成人免费在线观看| 国产精品嫩草99a| 99亚偷拍自图区亚洲| 国产精品美女一区二区三区| 99久久精品免费看国产免费软件| 国产精品美女久久久久久久网站| 成人动漫一区二区三区| 国产精品不卡在线| 91在线视频免费观看| 一区二区三区不卡视频| 欧美日免费三级在线| 爽爽淫人综合网网站| 欧美色手机在线观看| 麻豆国产欧美日韩综合精品二区| 精品福利一二区| 成熟亚洲日本毛茸茸凸凹| 亚洲人成网站精品片在线观看| 欧美日韩亚洲丝袜制服| 秋霞午夜av一区二区三区| 精品成人免费观看| 国产aⅴ综合色| 欧美一区二区三区四区五区| 国产成人日日夜夜| 亚洲欧洲日韩在线| 精品国产一区二区三区忘忧草| 91香蕉视频在线| 色狠狠一区二区| av一区二区三区四区| 高清国产一区二区三区| 韩国视频一区二区| 97se亚洲国产综合在线| 亚洲午夜精品久久久久久久久| 欧美日韩国产美| 92国产精品观看| 亚洲午夜精品17c| 91网站黄www| 国产精品伦理一区二区|