简介:
使用时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中文网其他相关文章!