0

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()」というメッセージで例外が発生します。

4

1 に答える 1

-1

私は週末中ずっとopencvとEmguCVをいじくり回していて、なんとかそれを整理することができました。点群を取得するために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);

于 2012-10-08T08:44:27.033 に答える