我正在使用EmguCV,我不知道如何为像here这样的图像点传递2xN,Nx2,3xN,Nx3或1xN(N是点数)的数组。
我有一个创建float [N,2]数组的方法,但Marshal.Copy没有多维数组的重载,我不知道如何将X和Y值作为一个传递。
答案 0 :(得分:4)
您只需调用cvCreateMat
函数即可创建这些矩阵。 documentation of the native interface包含很好的示例,说明如何执行此操作。
要设置数据,您可以使用cvSet2D
。它不如直接指针访问那么高效,但是从托管代码实现起来相当困难。
答案 1 :(得分: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))