C ++代码转换为Java

时间:2016-01-14 20:05:00

标签: java c++ opencv

我正在尝试将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的索引,但是他们试图访问的是哪个columnrow

1 个答案:

答案 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和列jrow.data[j]只获取该元素的值。

@Andy Turner的评论(将src乘以填充了1.0 / cols的{​​{1}} x 1矩阵)是计算均值的最简单方法,但它需要一个人理解一点线性代数(如果一个人正在编写矩阵操作代码,那么应该理解它)。