ここに示すように、Kinect を使用してキャンバス上で最大 4 つのグリフと描画とポリゴンを検出する小さな C# コードがあります。
2D 拡張現実を実装し、作成されたポリゴン内に画像を投影するために、これに従ってみました。ソース画像を読み込んで BackwardQuadrilateralTransformation を適用しようとしましたが、変換された画像を表示できないようです。おそらく間違った方法を使用していますが、画像を変換してキャンバスにペイントしようとしましたが、うまくいきませんでした。メソッドを大幅に誤解しているかどうかはわかりませんが、おそらくそれは不可能です。どんな助けも大歓迎です。必要に応じて、さらにサンプル コードを提供できます。
private void GlyphBackQuad(List<IntPoint> quadpoints)
{
Bitmap srcImage = new Bitmap( // my sample image filepath );
UnmanagedImage sourceImage = UnmanagedImage.FromManagedImage(srcImage);
BackwardQuadrilateralTransformation filter = new BackwardQuadrilateralTransformation(sourceImage, quadpoints);
filter.Apply(sourceImage);
Bitmap bmp = sourceImage.ToManagedImage();
ImageBrush ib = new ImageBrush();
ib.ImageSource = ConvertDrawingImage2MediaImageSource(bmp);
PolyCanvas.Background = ib;
}
コードをさらにいじった後、部分的な解決策を開発したと思いますが、まだいくつかの作業が必要ですが、これが人々の読み取り/デバッグに役立つことを願っています.
private void GlyphBackQuad(List<IntPoint> quadpoints, Bitmap bmp)
{
// Read in bitmap source image and clone it to the same format as destination
Bitmap srcImage = AForge.Imaging.Image.Clone(new Bitmap( // my sample filepath), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData bitmapData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
// Convert to unmanaged image
UnmanagedImage unmanagedImage = new UnmanagedImage( bitmapData );
// Filter
BackwardQuadrilateralTransformation filter = new BackwardQuadrilateralTransformation(srcImage, quadpoints);
filter.ApplyInPlace(unmanagedImage);
// Convert back to managed image and save
Bitmap managedImage = unmanagedImage.ToManagedImage();
managedImage.Save( // my save filepath, System.Drawing.Imaging.ImageFormat.Png);
}