0

Kinect のカラー フレームから avi ファイルを作成するために、AviFile ライブラリのSimple C# Wrapper と、ここで見つけたコード スニペットを使用しています。

そして、私はこの例外を受け取ります:「AVIFileOpenの例外:-2147205009」

        aviManager = new AviManager(@"C:\temp\temp.avi", false);
        aviStream = aviManager.AddVideoStream(false, 30, _firstBitmap);

上記の関数で「_firstBitmap」を生成したところ

Bitmap ImageToBitmap(ColorImageFrame Image)
{
     byte[] pixeldata = new byte[Image.PixelDataLength];
     Image.CopyPixelDataTo(pixeldata);
     Bitmap bmap = new Bitmap(Image.Width, Image.Height, PixelFormat.Format32bppRgb);
     BitmapData bmapdata = bmap.LockBits(
         new Rectangle(0, 0, Image.Width, Image.Height),
         ImageLockMode.WriteOnly, 
         bmap.PixelFormat);
     IntPtr ptr = bmapdata.Scan0;
     Marshal.Copy(pixeldata, 0, ptr, Image.PixelDataLength);
     bmap.UnlockBits(bmapdata);
     return bmap;
 }

また、カラー フレーム イメージは Kinect SDK の ColorFrameReady デリゲートから提供されます。

private void SensorColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
    using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
    {
        if (colorFrame != null)
        {
            // Copy the pixel data from the image to a temporary array
            colorFrame.CopyPixelDataTo(this.colorPixels);

            // Write the pixel data into our bitmap
            this.colorBitmap.WritePixels(
                new Int32Rect(0, 0, this.colorBitmap.PixelWidth, this.colorBitmap.PixelHeight),
                this.colorPixels,
                this.colorBitmap.PixelWidth * sizeof(int),
                0);
            AviManager aviManager = new AviManager(@"C:\temp\temp.avi", false);
            VideoStream aviStream = aviManager.AddVideoStream(false, 30, bmp);

            Bitmap bitmap = ImageToBitmap(colorFrame);
            aviStream.AddFrame(bitmap);
            bitmap.Dispose();
            aviManager.Close();
        }
    }
}

ありがとうございました !

4

1 に答える 1

1

AForge.NETフレームワークには、AVI やその他のビデオ ファイルを簡単に書き込める関数がいくつか用意されています。また、Kinect を直接サポートしているため、ビデオ カメラにアクセスできます。

ただし、ウェブサイトの情報によると、libfreenect. libfreenectオフィスの Kinect SDK が同じアプリケーション内で共存できるかどうかはわかりません。

AVIWriter クラスは非常に簡単で、必ずしも AForge.NET の Kinect アクセスを使用する必要はありません。公式の Kinect SDK から最新のカラー フレームを簡単に取得し、変換してBitmap出力することもできます。

于 2012-12-06T20:15:24.237 に答える