1. 程式人生 > >數字圖像處理—學習總結

數字圖像處理—學習總結

展現 ane apple wid lsp 高度 float 過程 type

VC++數字圖像處理 楊淑瀅

本文對該老師的代碼進行總結,代碼小白順便補充一下自己比較困惑的知識點,方便後續復習。

  • 對於BMP格式的圖像結構分為以下四個部分:
位圖文件頭結構BITMAPFILEHEADER
位圖信息頭結構BITMAPINFOHEADER
位圖顏色表RGBQUAD
位圖像素數據部分

  • 對於位圖的圖像分為四類:
  1. 單色圖像:有兩個值:0,255其中0表示黑,255表示白(也可以進行歸一化處理為0和1)。
  2. 灰度圖像:帶有顏色表,相當於索引表。RGB的分量值相同。
  3. 偽彩色圖像:RGB的分量不完全相同,帶有顏色表,相當於索引,整個圖像256種顏色。
  4. 24位真彩色圖像:沒有調色表,RGB三分量各占8位。
  • 對於C++中結構體結構的介紹:

在c++中如果用typedef的話:

    struct Student
    {
    int a;
    }stu1;//stu1是一個變量


    typedef struct Student2
    {
    int a;
    }stu2;//stu2是一個結構體類型=struct Student

即在C++中用typedef相當於重命名操作,相當於對struct後面的變量重新命名。

  • 對於變量中的類型別名問題—引入頭文件“windowsX.h"

windef.h——基本型態定義
winbase.h——Kernel函數
wingdi.h——圖形設備接口函數
winuser.h——使用者接口函數

其中這裏主要使用的是第一個應用:基本形態定義,這裏面定義了宏,方便後面的使用。

1 typedef unsigned long       DWORD; 
2 typedef int                 BOOL;
3 typedef unsigned char       BYTE; 
4 typedef unsigned short WORD; 5 typedef float FLOAT;

於是可以將BMP圖像的格式用代碼的方式展現出來

位圖文件頭:

1 typedef struct tagBITMAPFILEHEADER
2 {
3     WORD bftype;//表示2個字節,16位的短整數,用來判斷是否為位圖文件類型
4     DWORD bfsize;//表示4個字節,位圖文件的大小。
5     WORD  bfReaserved1;//位圖文件的保留字,必須為0.
6     WORD  bfReaserved2;//位圖文件的保留字,必須為0
7     DWORD bfOffBits;//表示數據的起始位置     
8 } BITMAPFILEHEADER; 

位圖信息頭:

typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;//本結構所占用字節數
LONG biWidth;//位圖的寬度,以像素為單位
LONG biHeight;//位圖的高度,以像素為單位
WORD biPlanes;//目標設備的級別,必須為1
WORD biBitCount;//每個像素所需的位數,1、4、8、24
DWORD biCompression;/*位圖壓縮類型,必須為0(不壓縮)、1(BI_RLE8壓縮類型)、2(BI_RLE4壓縮類型)之一*/
DWORD biSizeImage;//位圖的大小,以字節為單位
LONG biXPelsPerMeter;//位圖水平分辨率,每米像素數
LONG biYPelsPerMeter;//位圖垂直分辨率,每米像素數
DWORD biClrUsed;//位圖實際使用的顏色表的顏色數
DWORD biClrImportant;//位圖顯示過程中重要的顏色數
}BITMAPINFOHEADER;

顏色表:

typedef struct tagRGBQUAD
{
BYTE rgbBlue;//藍色的亮度(0~255)
BYTE rgbGreen;//綠色
BYTE rgbRed;//紅色
BYTE rgbReserved;//保留,必須為0
}RGBQUAD;

把結構體構造結束之後,來構造BMP文件的類:

數字圖像處理—學習總結