因此,这意味着src.at(i,j)
正在使用(i,j)
as(row,column)但Point(x,y)
正在使用(x,y)
as(column,row)
没错!由于这似乎使许多人感到困惑,因此我将解释写在下面:
在OpenCV中,cv::Mat
由于离散图像基本上与矩阵相同,因此可同时用于图像和矩阵。
在数学中,我们有一些不同的东西:
- 具有多个行和多个列的矩阵。
- 具有多个轴的(功能)图形,并以图像形式图形表示图形。
- 点,由坐标系统的轴排序,该坐标系通常是笛卡尔坐标。
1.对于矩阵,数学符号按行优先顺序排列,即
按照常规矩阵符号,行由二维数组的第一个索引编号,列由第二个索引编号,即a1,2是第一行的第二个元素,向下和向右计数。(请注意,这与笛卡尔惯例相反。)
取自http://en.wikipedia.org/wiki/Row-major_order#Explanation_and_example
与数学一样,第0行,第0列是矩阵的左上角元素。行/列就像表格中的...
0/0---column--->
|
|
row
|
|
v
2.对于Points,选择一个满足以下两个条件的坐标系:1.它使用与矩阵符号相同的单位大小和相同的“原点”,因此左上角是Point(0,0)和轴长1表示1行或1列的长度。2.它使用“图像符号”进行轴排序,这意味着横坐标(水平轴)是指定x方向的第一个值,而纵坐标(垂直轴)是指定y方向的第二个值。
轴相交的点是两条数字线的共同原点,简称为原点。通常将其标记为O,如果这样,则将轴称为Ox和Oy。定义了x轴和y轴的平面通常称为笛卡尔平面或xy平面。x的值称为x坐标或横坐标,而y的值称为y坐标或纵坐标。
字母的选择来自原始约定,即使用字母的后半部分指示未知值。字母的第一部分用于指定已知值。
http://zh.wikipedia.org/wiki/Cartesian_coordinate_system#Two_dimensions
因此,在理想世界中,我们将点/图像的坐标系选择为:
^
|
|
Y
|
|
0/0---X--->
但由于我们希望该原点位于左上角,而正值要移至最底端,因此它是:
0/0---X--->
|
|
Y
|
|
v
因此,对于图像处理人员来说,行优先表示法可能很奇怪,但是对于数学家来说,x轴优先表示法访问矩阵是很奇怪的。
因此,在OpenCV中,如果和完全可理解=),则可以使用:mat.at<type>(row,column)
或mat.at<type>(cv::Point(x,y))
访问同一点。x=column
y=row
希望这个正确。我对这些符号了解不多,但这就是我在数学和图像处理方面的经验告诉我的。