我正在使用Accord.Video.ffmpeg在c#中录制视频。它实际上是一个深度视频,其中像素表示深度幅度。从深度数组我创建一个位图,并使用WriteVideoFrame方法保存位图
之后,我在Matlab中逐帧打开视频。问题是我在c#中的位图和Matlab中的帧之间有区别吗?!差异大概是10(在255的范围内,这是一个大问题)(如果它是恒定的,那么此刻测试)。
由于从位图到视频帧,我不执行任何操作,我认为问题出在视频编码器中。即使格式是Raw,也可以吗?!
提示?
亚历克斯
的更新
如果我在新项目中运行此代码,一切都很好
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();
}
}
当我尝试读取图像而不是RGB = [100 100 100]时,回到我的代码我有[96 94 99]。
我的起始代码是从kinect v2保存深度图像,当新的有效帧到达时调用该函数
我不知道造成这种差异的原因......
答案 0 :(得分:0)
解决了...是Nuget包我在旧项目中有3.4.2-alpha版本(奇怪的行为)而新的3.5.0是最后一个(工作)。更新包解决了问题