C#でWEBカメラを使う AForge.NETによる方法
概要
AForge.NET Frameworkを使う.AForge.NET Frameworkは,コンピュータビジョンとか人工知能の分野の開発者・研究者向けのフレームワーク.DirectShowでビデオを読み込むクラスが実装されているので,それを使う.
手順
「Windows フォーム アプリケーション」を作成
AForge.NETのインストール
Nugetにパッケージがあるのでインストール.Nugetの使い方がわからない人はここらへんを参照.AForge.NET関連のパッケージは役割に応じてたくさんあるが,今回は「AForge.Controls」と「AForge.Video.DirectShow」を選択してインストール.すると,依存関係のあるパッケージもインストールされる.
VideoSourcePlayerのコントロールの配置
AForge.NETで用意されている動画表示用のコントロールVideoSourcePlayerを使う(Pictureboxとかでも表示可能ではあるが,表示するだけならVideoSourcePlayerの方が楽).
VideoSourcePlayerは,「AForge.Controls.dll」というDLLに入っている.Nugetでのインストールが済んでいれば,ソリューションフォルダの下の「package→AForge.Controls.X.X.X→lib→AForge.Controls.dll」とたどればあるはず.
ツールボックスの適当なところで右クリックして「アイテムの選択(I)...」を選択.「.NET Framework コンポーネント」タブの「参照(B)...」ボタンを押して,「AForge.Controls.dll」を選択したらOK.
するとツールボックスに「VideoSourcePlayer」というコントロールができているので,フォーム上に配置する.
ソースコード
以下,動作確認用プログラムのソースコード.わりと短いコードでWEBカメラからの映像表示が可能.プログラムを起動すると,キャプチャデバイスを選択するダイアログが表示され,選択すると映像が表示される.ボタンクリックによって,現在のフレームをファイルに保存できるようになっている.
using System; using System.Windows.Forms; using AForge.Video.DirectShow; namespace AforgeNetTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // ビデオキャプチャデバイスを選択するダイアログの生成 var form = new VideoCaptureDeviceForm(); // 選択ダイアログを開く if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // 選択されたデバイスをVideoSourcePlayerのソースに設定 videoSourcePlayer1.VideoSource = form.VideoDevice; // ビデオキャプチャのスタート videoSourcePlayer1.Start(); } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { // 閉じるときの処理 if (videoSourcePlayer1.VideoSource != null && videoSourcePlayer1.VideoSource.IsRunning) { videoSourcePlayer1.VideoSource.SignalToStop(); videoSourcePlayer1.VideoSource = null; } } private void button1_Click(object sender, EventArgs e) { // 現在のフレームをビットマップに保存 var bmp = videoSourcePlayer1.GetCurrentVideoFrame(); bmp.Save("a.bmp"); } } }