我在C#中使用EmguCV和OpenNi来从Kinect中检索pointcloud。我正在使用的代码如下:
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()”消息的异常。
答案 0 :(得分:-1)
我整个周末一直在修补opencv和Emgu CV,我已经设法解决了这个问题。事实证明,您可以使用RetrieveBgrFrame来检索点云。
Image pcl = kCapture.RetrieveBgrFrame((int)Emgu.CV.KinectCapture.OpenNIDataType.PointCloudMap);
Image pclf = new Image(pcl.MIplImage.width, pcl.MIplImage.height, pcl.MIplImage.widthStep, pcl.MIplImage.imageData);