5

ビデオ ストリームの処理を実行する ac# アプリケーションがあります。これは各フレームをビットマップ形式で受け取る低レベルのアプリケーションなので、基本的に毎秒 25 枚の画像が必要です。このアプリケーションは、一部のメディア ソースで既に機能していますが、入力デバイスとして Web カメラを追加する必要があります。

したがって、基本的には、これらすべてのフレームを「ストリーム」としてアプリケーションに渡すことができるように、Web カメラから連続的にビットマップ イメージをキャプチャする必要があります。

ウェブカメラにアクセスし、ウェブカメラから実際のフレームを個々の画像として直接読み取る最も簡単で最良の方法は何ですか? 私はまだスターティング ブロックにいます。

ウェブカメラにアクセスし、Windows パネルでウェブカメラのコンテンツをプレビューし、スクリーン キャプチャを使用してこの画像を再度キャプチャできるライブラリが多数あります。残念ながら、これでは毎秒 25 フレームをキャプチャするときに必要なパフォーマンスが得られません。IVMRWindowlessControl9::GetCurrentImage は別の代替手段として言及されていますが、これも画像の絶え間ないストリームではなく、まれなスナップショットを目的としているようです。Directshow.Netは良い候補として多くの人に挙げられていますが、Web カメラから画像を簡単に取得する方法は不明です。また、Microsoft が Directshow をサポートしなくなったことについて、多くの情報源が懸念を表明しています。また、これについて私が見た実装には ImageGrabber が必要ですが、これもサポートされていないようです. MS からの新しい代替手段は Media Foundation のようですが、私の調査では、これを実装する方法の実例は見つかりませんでした (また、これが XP などの古いバージョンの Windows で動作するかどうかもわかりません)。DirectX.Captureは素晴らしいライブラリ (素晴らしい実装を参照) ですが、ビデオ画像を直接取得するためのフィルターとメソッドがないようです。フィルターとフィルター グラフも調べ始めましたが、これは非常に複雑で、「車輪の再発明」のように感じます。

全体として、上記で簡単に説明したすべてのソリューションはかなり古いようです。C# で Web カメラを動作させ、そこから 1 秒あたり数枚の画像を取得するためのステップバイステップ ガイドを教えてください。(ある時点でオーディオも行う必要があるため、ビデオを除外しないソリューションが最も役立ちます)。

4

2 に答える 2

4

dr.mo が示唆するように、Aforge がその答えでした。

ここのチュートリアルを使用しました: http://en.code-bude.net/2013/01/02/how-to-easy-record-from-a-webcam-in-c/

チュートリアルでは、Web カメラからフレームを受信するたびにイベント ハンドラーを起動します。元のチュートリアルでは、このビットマップを使用して画像を PictureBox に書き込みます。ビットマップ画像をピクチャボックスではなくファイルに保存するように変更しただけです。そのため、次のコードを置き換えました。

pictureBoxVideo.BackgroundImage = (Bitmap)eventArgs.Frame.Clone();

次のコードを使用します。

Bitmap myImage = (Bitmap)eventArgs.Frame.Clone();
string strGrabFileName = String.Format("C:\\My_folder\\Snapshot_{0:yyyyMMdd_hhmmss.fff}.bmp", DateTime.Now);            
myImage.Save(strGrabFileName, System.Drawing.Imaging.ImageFormat.Bmp);

そしてそれは魅力のように機能します!

于 2013-05-03T12:21:56.670 に答える