1

顔検出を使用せずに、頭の周りで Microsoft Kinect を使用して画像をキャプチャしようとしています。頭の周りだけでなく、カメラ全体の画像をキャプチャすることができました。インターネットでサンプル コードを見つけましたが、私のプログラムでは動作しないようです。プログラムに Microsoft SDK v1.6 と Microsoft Visual Studio を使用しています。誰でもこれについて私を助けることができますか? どうもありがとう。XD

CroppedBitmap を試してみました

CroppedBitmap croppedImage = new CroppedBitmap();
              croppedImage.BeginInit();
              croppedImage.Source = colorImageBitmap;
              croppedImage.SourceRect = new Int32Rect((int)headPos.X, (int)headPos.Y, (int)imageHeight, (int)imageWidth);
              croppedImage.EndInit();
              headImage.Source = croppedImage;

また、Kinect Crop Image のコーディングも行っていますが、SDKv.16 Kinect のクロップ イメージには平面イメージが存在しないと聞きました。

https://stackoverflow.com/questions/11435544/how-do-i-save-a-croppedbitmap-to-an-image-fileも試しましたが、 NullReferenceException was unhandled エラーが発生しています。

double imageHeight = heightDiff * 1.2;

double imageWidth = ((heightDiff * 1.2) / 2);

            Int32Rect cropRect = new Int32Rect((int)headPos.X, (int)headPos.Y, (int)imageWidth, (int)imageHeight);

            this.headImageBitmap = new WriteableBitmap(this.headImageBitmap.PixelWidth, this.headImageBitmap.PixelHeight, 96, 96, PixelFormats.Bgr32, null);

            this.headImageBitmap.WritePixels(new Int32Rect((int)headPos.X, (int)headPos.Y, (int)imageWidth, (int)imageHeight), colorData, (int)imageWidth * colorFrame.BytesPerPixel, 0);

            CroppedBitmap croppedImage = new CroppedBitmap(colorImageBitmap, cropRect);
            headImage.Source = croppedImage;
4

1 に答える 1

0

思い通りの結果が得られました。たくさんの人に感謝します!

これが私が画像をキャプチャする方法です。

私の画像の名前はheadImageと呼ばれています。

プライベートボイドcaptureImage()

    {

        BitmapEncoder encoder = new JpegBitmapEncoder();

        encoder.Frames.Add(BitmapFrame.Create(this.croppedImage));

        string time = System.DateTime.Now.ToString("hh'-'mm'-'ss", CultureInfo.CurrentCulture.DateTimeFormat);

        string myPhotos = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);

        string path = System.IO.Path.Combine(myPhotos, "KinectSnapShot-" + time + ".jpg");

        try
        {
            using (FileStream fs = new FileStream(path, FileMode.Create))
            {
                encoder.Save(fs);
            }
            imageTB.Text = string.Format("{0} {1}", Properties.Resources.ScreenshotWriteSuccess, path);
        }
        catch (IOException)
        {
            imageTB.Text = string.Format("{0} {1}", Properties.Resources.ScreenshotWriteFailed, path);
        }
    }

そしてこれは私がcroppedBitmapから使用したコーディングです

Int32RectcropRect = new Int32Rect((int)(headPos.X * 0.8)、(int)(headPos.Y * 0.7)、(int)headImage.Width、(int)headImage.Height);

            this.headImageBitmap = new WriteableBitmap(colorFrame.Width, colorFrame.Height, 96, 96, PixelFormats.Bgr32, null);

            this.headImageBitmap.WritePixels(new Int32Rect((int)headPos.X, (int)headPos.Y, (int)headImage.Width, (int)headImage.Height), colorData, (int)headImage.Width * colorFrame.BytesPerPixel, 0);

            croppedImage = new CroppedBitmap(colorImageBitmap, cropRect);

            headImage.Source = croppedImage;
于 2013-03-01T05:48:26.697 に答える