0

我正在使用 EmguCV,但我不知道如何为此处记录的图像点传递 2xN、Nx2、3xN、Nx3 或 1xN(N 是点数)的数组。

我有一种创建 float[N,2] 数组的方法,但是 Marshal.Copy 没有多维数组的重载,我不知道如何将 X 和 Y 值作为一个传递。

4

2 回答 2

4

您只需调用该cvCreateMat函数来创建这些矩阵。本机接口的文档包含很好的示例,展示了如何执行此操作。

为了设置您可以使用的数据cvSet2D。它不如直接指针访问效率高,但从托管代码中实现这一点相当困难。

于 2012-04-29T12:39:19.973 回答
0

试试这个:

float[,] floats = new float[2,3];
IntPtr intPtr = Marshal.UnsafeAddrOfPinnedArrayElement(floats, 0);

以下方法可能有效,但可能会对 GC 产生问题,因此请谨慎使用:

float[,] floats = new float[3, 2];

fixed (void* pt = array)
{
    IntPtr intPtr = new IntPtr(pt);

    CallMethod(intPtr, other parameters...);
}

但是被调用的方法应该以某种方式知道维度是什么。可能按名称(DoSomething2x3、DoSomething3x2 等),或按参数(DoSomething(IntPtr ptr, int width, int height))

于 2012-04-29T12:36:34.873 回答