我正在尝试将C ++ opencv脚本转换为Java,但是我一直在遇到这条小行:Mat.data[x]
。我检查了Java版本,我能找到的最接近的方法是Mat.dataAddr()
。看看它在下面的代码中使用的方式:
for (i = 0 ; i < rows ; i++)
{ // average row by row
row = src.row(i);
mean = 0;
for (j = 0 ; j < row.cols ; j++)
{
// here is the method
mean + = row.data[j];
}
mean /= row.cols;
dist.data[i] = mean;
}
他们似乎正在尝试访问Matrix的索引,但是他们试图访问的是哪个column
和row
?
答案 0 :(得分:2)
该代码段正在尝试计算该行中所有元素的每一行的平均值。输入2-D矩阵为src
,输出1-D数组为dist
。
因此,对于每一行(使用索引变量i
),它将整行输入一个名为row
的变量。
row = src.row(i);
之后,它使用变量j
作为索引迭代该行中的值,将每个值添加到变量mean
。
mean + = row.data[j];
你提到过这一行。所有这一切都是引用数组的第j个元素。在这种情况下,数组是行i
的1-D值数组。所以它的行i
和列j
和row.data[j]
只获取该元素的值。
src
乘以填充了1.0 / cols
的{{1}} x 1矩阵)是计算均值的最简单方法,但它需要一个人理解一点线性代数(如果一个人正在编写矩阵操作代码,那么应该理解它)。