在 OpenCV 等影像處理庫中,座標系和矩陣元素的順序可能會令人困惑。本文旨在闡明這些概念,特別是 OpenCV 中使用 Point(x,y) 與 at(i,j) 存取矩陣元素的比較。
OpenCV 的 cv: :Mat 資料結構用於影像和矩陣。從數學上講,矩陣按行優先順序排序,這意味著第一個索引指定行,第二個索引指定列。
座標系中的點通常用 x 排序第一個軸和第二個 y 軸(笛卡爾座標系)。然而,在影像處理中,使用的軸排序稱為影像符號,其中第一個值代表 x 方向(橫座標),第二個值代表 y 方向(縱座標)。
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中文網其他相關文章!