2017-05-25 27 views
0



我正在使用Accord.Video.ffmpeg在c#中錄製視頻。它實際上是一個深度視頻,其像素表示深度的大小。從深度數組中,我創建一個位圖並用WriteVideoFrame方法保存位圖。
之後,我在Matlab中逐幀打開視頻。問題是我在C#中的位圖和Matlab中的框架有區別?!差異大致是10(在255的範圍內,這是一個大問題)(現在測試,如果它是恆定的)。
由於從位圖到videoframe我不執行任何操作,我認爲問題出在視頻編碼器。即使格式是原始格式,是可能的嗎?!
提示?
亞歷

UPDATEWriteVideoFrame()with Videocodec.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

解決......是NuGet包我版本3.4.2-α在舊項目(奇怪的行爲)和新的3.5.0最後一個(工作)。更新軟件包解決了問題