我没有找到任何解释如何使用具有多个通道的矩阵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的值?
答案 0 :(得分: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;