最簡單的圖就是單通道的灰度圖。在一張灰度圖中,每個像素位置(x,y)對應一個灰度值I,圖像在計算機中就存儲為數值矩陣。
一張寬度為640像素,高度為480像素分辨率的灰度圖就可以表示為
unsigned char image[480][640]
為什么這里的二維數組是 480 × 640 呢?因為在程序中,圖像以一個二維數組形式存儲。它的第一個下標則是指數組的行,而第二個下標是列。在圖像中,數組的行數對應圖像的高度,而列數對應圖像的寬度。
當我們訪問某一個像素時,需要指明它所處的坐標,請看下圖。

左邊顯示了傳統像素坐標系的定義方式。一個像素坐標系原點位於圖像的左上角,X 軸向右,Y 軸向下(也就是前面所說的 u, v 坐標)。如果它還有第三個軸的話,根據右手法則,Z 軸應該是向前的。這種定義方式是與相機坐標系一致的。我們平時說的圖
像的寬度和列數,對應着 X 軸;而圖像的行數或高度,則對應着它的 Y 軸。
根據這種定義方式,如果我們討論一個位於 x, y 處的像素,那么它在程序中的訪問方
式應該是:
unsigned char pixel = image[y][x];
它對應着灰度值 I(x, y) 的讀數。請注意這里的 x 和 y 的順序。雖然我們有些繁瑣的討論坐標系的問題,但是像這種下標順序的錯誤,會是新手在調試過程中經常碰到
的,又具有一定隱蔽性的錯誤之一。如果你在寫程序時不慎調換了 x, y 的坐標,編譯器無法提供任何信息,而你能看到的只是程序運行中的一個越界錯誤而已。
