今C#のOpenCVSharpでリアルタイムSURF検出のプログラムをかいているのですが、Cv.ExtractSURFの部分で、out imageDescriptorsだけエラーがでます。
一部だけですがコードをのせます。
Kinectで深度情報を得てそれをSURF検出するプログラムですが深度の部分は関係ないので割愛します。
どうしてもそこだけ原因がわからなかったのでアドバイスをもらえるとうれしいです。
ついでで良いですがなにか他におかしいところがあれば意見をください。
C#
1private void SensorDepthFrameReady(object sender, DepthImageFrameReadyEventArgs e) 2 { 3 while (true) 4 { 5 CvMemStorage storage = new CvMemStorage(0); 6 CvSeq<CvSURFPoint> imageKeypoints; 7 CvSeq<float> imageDescriptors; 8 CvSURFParams param = new CvSURFParams(500, true); 9 10 //OpenCV用画像 11 CvImg = Cv.CreateImage(new CvSize(640, 480), BitDepth.U8, 3); 12 //OpenCV用グレースケール画像 13 CvGrayImg = new IplImage(CvImg.Size, BitDepth.U8, 1); 14 15 using (DepthImageFrame depthImageFrame = e.OpenDepthImageFrame()) 16 { 17 if (depthImageFrame != null) 18 { 19 depthImageFrame.CopyPixelDataTo(depthFrame16); 20 convertDepthFrame(depthFrame16); 21 22 //WritablebitmapをIplImageに変換 23 CvImg = srcImg.ToIplImage(); 24 25 //グレースケール処理 26 Cv.CvtColor(CvImg, CvGrayImg, ColorConversion.BgrToGray); 27 28 //out imageDescriptors の場所にエラー表示 29 Cv.ExtractSURF(CvGrayImg, null, out imageKeypoints, out imageDescriptors, storage, param); 30 for (int i = 0; i < 100; i++) 31 { 32 CvSURFPoint point = Cv.GetSeqElem<CvSURFPoint>(imageKeypoints, i).Value; 33 CvPoint center = new CvPoint 34 { 35 X = Cv.Round(point.Pt.X), 36 Y = Cv.Round(point.Pt.Y) 37 }; 38 Cv.Circle(CvImg, center, 2, new CvScalar(0, 255, 255), 1); 39 } 40 depthImage.Source = BitmapSource.Create(depthImageFrame.Width, depthImageFrame.Height, 96, 96, PixelFormats.Bgr32, null, depthFrame32, depthImageFrame.Width * 4); 41 } 42 } 43 } 44 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。