私はAccord.Video.ffmpegを使ってビデオをC#で記録しています。実際には、深さの大きさを示すピクセルを持つ深度ビデオです。深さの配列からビットマップを作成し、WriteVideoFrameメソッドでビットマップを保存します。
その後、私はMatlabでビデオをフレームごとに開きます。問題は、私はC#のビットマップとMatlabのフレームの間に違いがあるということです!違いは10の多かれ少なかれ(255の範囲では大したことです)(それが一定であれば現時点でテストします)。
ビットマップからビデオフレームへは何も操作しないので、問題はビデオエンコーダにあると思います。フォーマットは未加工ですが可能ですか?
ヒント?
アレックス
UPDATEVideocodec.RawでのWriteVideoFrame()のピクセル値の変更
私は新しいプロジェクトのすべてでこのコードを実行した場合、私が代わりにRGB = [の画像を読み取るしようとすると、
unsafe private void Button_Click_1(object sender, RoutedEventArgs e)
{
writerdepth.Open("testvideo.avi", 512, 424, 15, VideoCodec.Raw);
for (int i = 0; i <depthPixels.Length; i++)
{
this.depthPixels[i] = (byte)100;
}
try
{
fixed (byte* p = depthPixels)
{
IntPtr unmanagedPointer = (IntPtr)p;
depthbm = new Bitmap(512, 424, 512, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, unmanagedPointer);
}
}
catch (Exception ex)
{
Debug.WriteLine("Errore");
}
writerdepth.WriteVideoFrame(depthbm);
writerdepth.Close();
}
}
は私のコードに戻って結構です100 100 100]私は[96 94 99]を持っています。
私の開始コードはkinect v2の深さ画像を保存しています。この関数は、新しい有効なフレームが到着したときに呼び出されます。
私はこの違いの理由の分からない...解決