首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 攝影機影像擷取方案比較:DirectX.Capture、OpenCV、EmguCV、AForge

     編輯:關於.NET

背景

Windows 影像擷取 API 歷經 VFW → DirectShow → Media Foundation 三代。.NET 直接呼叫 COM 介面不便,社群提供多種封裝庫。

四大主流封裝庫比較

庫基礎影像擷取音訊擷取單幀取得授權易用性
DirectX.CaptureDirectShow✓✓✗開放簡單
OpenCV (1.1+)DirectShow✓✗✓BSD中等
EmguCVOpenCV (.NET 封裝)✓✗✓商業/免費版有限制優
AForge.NETDirectShow (純 .NET)✓✗✓ (事件式)LGPL優 (文件完整)

代碼範例

DirectX.Capture

Capture cap = new Capture(Filters.VideoInputDevices[0], Filters.AudioInputDevices[1]);
cap.Filename = @"C:\MyVideo.avi";
cap.Start(); /* ... */ cap.Stop();

OpenCV (C 介面)

IntPtr cap = CvInvoke.cvCreateCameraCapture(deviceIndex);
while (!stop) {
    IntPtr frame = CvInvoke.cvQueryFrame(cap);
    /* 處理 frame */
}
CvInvoke.cvReleaseCapture(ref cap);

EmguCV

Capture cap = new Capture(deviceIndex);
while (!stop) { pictureBox.Image = cap.QueryFrame().Bitmap; /* ... */ }
cap.Dispose();

AForge.NET (事件式)

VideoCaptureDevice cap = new VideoCaptureDevice(monikerString);
cap.NewFrame += (s, e) => pictureBox.Image = (Bitmap)e.Frame.Clone();
cap.Start(); /* ... */ cap.SignalToStop();

效能測試結論

  • 四者皆基於 DirectShow,原生效能幾無差異
  • 實際效能主要取決於攝影機硬體與驅動程式 (Win7 缺乏專用驅動時表現較 XP 差)

選型建議

  1. 需同步錄製音訊 → DirectX.Capture (唯一支援)
  2. 需單幀處理、電腦視覺演算法 → AForge.NET (文件最好、功能最全、純 .NET) 或 EmguCV (OpenCV 生態)
  3. 專案授權敏感 → 避開 EmguCV 免費版商業授權限制
  4. 快速原型 → AForge.NET 事件模型最直覺

附錄:OpenCV 1.1+ 確實使用 DirectShow

原始碼證據 (_highgui.h, cvcap_dshow.cpp, cvapp.cpp) 顯示編譯條件 HAVE_VIDEOINPUT 啟用時透過 videoinput.h (DirectShow 封裝) 建立 CvCaptureCAM_DShow 類別,並優先於 VFW 嘗試建立。

完整效能測試程式碼

包含裝置列舉、能力選擇、三庫效能測試 (FPS 計算)、即時預覽、多執行緒擷取、UI 同步更新完整 WinForms 專案代碼 (見原文)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved