簡介:
使用時OpenCV,您可能已經註意到,使用Point(x,y) 座標存取影像矩陣(cv::Mat) 中的像素似乎違反直覺,因為(x,y) 可能不像您期望的那樣引用行和列。本文旨在澄清這種明顯的不一致。
理解座標系:
在數學中,矩陣通常使用行優先排序來訪問,其中第一個索引代表行,第二個索引代表列。另一方面,點遵循笛卡爾座標系,其中 (x,y) 通常分別指定水平(橫座標)和垂直(縱座標)軸。
OpenCV 的矩陣與座標系:
cv::Mat,在 OpenCV 中用於影像和矩陣,本質上是一個矩陣。但是,在存取其元素時,它遵循行優先順序。因此,mat.at
但是,OpenCV 中的 Point 類別是基於影像表示法的,其中 (x,y) 指的是分別是列和行。這表示影像上下文中的 Point(i,j) 將引用第 j 行和第 i 列中的像素。
為什麼會有差異?
原因這種不一致在於矩陣和點所使用的不同座標系。出於數學原因,矩陣優先考慮行優先排序,而點優先考慮圖像符號,以便於圖像的可視化和理解。
結論:
雖然 OpenCV 中的不同座標系最初可能會令人困惑,理解它們的底層邏輯將確保您正確存取和操作像素資料。請記住,mat.at
以上是OpenCV的Point(x,y):列-行還是行-列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!