C++ 代码翻译成 Java
Posted
技术标签:
【中文标题】C++ 代码翻译成 Java【英文标题】:C++ Code translation to Java 【发布时间】:2016-01-14 20:05:00 【问题描述】:我正在尝试将 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
?
【问题讨论】:
为什么不直接将src
乘以一个填充有1.0 / cols
的cols x 1
矩阵?
我的意思是:为什么要访问单个元素来计算平均值,为什么不将其作为矩阵乘法呢?
@AndyTurner 我只需要row.data[j]
的java翻译
@ChromeLanta 我只需要 row.data[j] 的 java 翻译——该行在 Java 中看起来(和所做)之间的明显区别是什么反对 C++?我没有看到。所以你是说如果你在 Java 程序中看到这个你会被难住:row.data[j]
?
【参考方案1】:
sn-p 正在尝试计算该行中所有元素的每一行的平均值。输入二维矩阵为src
,输出一维数组为dist
。
因此对于每一行(使用索引变量i
),它将整行放入一个名为row
的变量中。
row = src.row(i);
之后,它使用变量j
作为索引迭代该行中的值,将每个值添加到变量mean
。
mean + = row.data[j];
还有你提到的那一行。所做的只是引用数组的第 j 个元素。在这种情况下,该数组是行i
的一维值数组。所以它是行i
和列j
,而row.data[j]
只是获取该元素的值。
@Andy Turner 的评论(将 src
乘以填充 1.0 / cols
的 cols
x 1 矩阵)是计算均值的最直接方法,但它需要理解一点线性代数(如果一个人正在编写矩阵操作代码,应该使用哪个)。
【讨论】:
@Erick G. Hagstrom 非常感谢,我想我必须重新访问我的Linear Algebra
你也可以使用reduce,参数dim=1
和rtype = CV_REDUCE_AVG
。好吧,无论在 OpenCV Java 包装器中调用什么。以上是关于C++ 代码翻译成 Java的主要内容,如果未能解决你的问题,请参考以下文章