Kinect からポイントクラウドを取得するために、C# で EmguCV と OpenNi を使用しています。私が使用しているコードは以下のとおりです。
IntPtr img = CvInvoke.cvRetrieveFrame(kCapture.Ptr, 1);
if (img != IntPtr.Zero)
{
MIplImage iplImage = (MIplImage)Marshal.PtrToStructure(img, typeof(MIplImage));
MCvPoint3D32f[] points = new MCvPoint3D32f[iplImage.width * iplImage.height];
GCHandle handle = GCHandle.Alloc(points, GCHandleType.Pinned);
using (Matrix m = new Matrix(iplImage.height, iplImage.width, handle.AddrOfPinnedObject()))
{
CvInvoke.cvCopy(img, m, IntPtr.Zero);
}
handle.Free();
}
コピー操作を実行しようとすると、「OpenCV: src.channels() == dst.channels()」というメッセージで例外が発生します。