首頁 > 後端開發 > C++ > OpenCV 的「Point(x,y)」與矩陣存取中的「at(i,j)」有何不同?

OpenCV 的「Point(x,y)」與矩陣存取中的「at(i,j)」有何不同?

DDD
發布: 2024-12-09 17:48:15
原創
955 人瀏覽過

How Does OpenCV's `Point(x,y)` Differ from `at(i,j)` in Matrix Access?

了解 OpenCV 中的座標系

在 OpenCV 等影像處理庫中,座標系和矩陣元素的順序可能會令人困惑。本文旨在闡明這些概念,特別是 OpenCV 中使用 Point(x,y) 與 at(i,j) 存取矩陣元素的比較。

矩陣排序

OpenCV 的 cv: :Mat 資料結構用於影像和矩陣。從數學上講,矩陣按行優先順序排序,這意味著第一個索引指定行,第二個索引指定列。

點座標

座標系中的點通常用 x 排序第一個軸和第二個 y 軸(笛卡爾座標系)。然而,在影像處理中,使用的軸排序稱為影像符號,其中第一個值代表 x 方向(橫座標),第二個值代表 y 方向(縱座標)。

OpenCV 矩陣存取

OCV 的at(i,j) 方法允許使用(行、列)索引存取元素,矩陣的左上角為(0,0).

點存取

OpenCV 中的Point(x,y) 建構函式允許使用影像表示法存取cv::Mat的元素,其中 x 代表列,y 代表列行。

範例

考慮一個 300x200 矩陣(src):

for (int i = 0; i < src.rows; i++) {
  for (int j = 0; j < src.cols; j++) {
    line(src, Point(i, j), Point(i, j), Scalar(255, 0, 0), 1, 8);
  }
}
登入後複製

此程式碼的目的是在整個影像上繪製一條白線。但是,它僅填充圖像的上部。這是因為 line 函數使用 Point(i,j) 建構函數,它將 i 解釋為列,j 解釋為行。

使用 at(i,j) 而不是 Point(i,j) 將正確地用白色填充整個影像,因為它使用(行,列)排序。

結論

理解行/列之間的區別OpenCV 中矩陣的排序和用於點的圖像符號對於在 OpenCV 中有效操作圖像和矩陣至關重要。 at(i,j) 方法和 Point(x,y) 建構函式提供了基於不同座標系存取元素的便捷方法,滿足應用程式的特定需求。

以上是OpenCV 的「Point(x,y)」與矩陣存取中的「at(i,j)」有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板