2

我没有找到任何解释如何使用具有多个通道的矩阵 im emgucv

var matrixa = new Matrix<float>(usablePoints.Count, 1, 2);

我尝试了 Split() 函数,但它没有改变matrixa的值

var channels = matrixa.Split();
for (int i = 0; i < usablePoints.Count; ++i)
{
  channels[0][i, 0] = usablePoints[i].X;
  channels[1][i, 0] = usablePoints[i].Y;
}

我错过了什么?我怎样才能操纵matrixa的值?

4

1 回答 1

3

如果您查看matrixa.Data,这将是float[,]第一个维度对应于行,第二个维度是合并到一个维度的列和通道。如果通道数为N,当前通道为n,当前列为m,则第二维的索引j

j = m*N + n

因此,对于您的示例:

for (int i = 0; i < usablePoints.Count; ++i)
{
  matrixa.Data[i, 0] = usablePoints[i].X;
  matrixa.Data[i, 1] = usablePoints[i].Y;
}

应该管用。

一个更复杂的例子:假设我们有 3 个通道,5 列,并且想将第 2 行,第 4 列和第 3 通道的值设置为 1:

j = m*N + n = 3*3 + 2 = 11
=>
matrixa.Data[1, 11] = 1;
于 2013-04-09T13:52:15.207 回答