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

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

我尝试了Split()函数,但它没有更改矩阵的值
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.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列,并且想要将第二行,第四列和第三通道的值设置为1:
j = m*N + n = 3*3 + 2 = 11
=>
matrixa.Data[1, 11] = 1;

关于c# - 如何在Emgucv中设置多 channel 矩阵的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15816710/

10-09 13:35