WriteVideoFrame() Videocodec.Raw 更改像素值
WriteVideoFrame() with Videocodec.Raw change pixel value
我正在使用 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 保存深度图像,当新的有效帧到达时调用该函数。
我不知道造成这种差异的原因...
已解决...是我在旧项目(奇怪的行为)中使用版本 3.4.2-alpha 的 Nuget 包,而新的 3.5.0 是最后一个(工作)。更新包解决了问题
我正在使用 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 保存深度图像,当新的有效帧到达时调用该函数。
我不知道造成这种差异的原因...
已解决...是我在旧项目(奇怪的行为)中使用版本 3.4.2-alpha 的 Nuget 包,而新的 3.5.0 是最后一个(工作)。更新包解决了问题