プロトタイプ的にWindows用のアプリケーションを新たに作成するにあたり、ちょっと考えました。Windows Formsなら自分もそれなり多少は経験もあるけど、新規でつくるのに今さらFormsというのもどうなのかしら? でもWPFやUWPも結局のところあまり普及してきている感じがしないし、枯れたFormsに比べれば、情報はかなり少ない。XAML Islands? 何それ?
このプロトタイプは、PCに接続したWebカメラで撮影した画像をOpenCVでちょちょいと弄れるだけでいいのですが、でもFormsからカメラなどメディア関連の制御をするのは結構大変です。DirectShowとかMedia Foundationなどを使ってC++でゴリゴリ書く気になれば色々細かいところまで自由になるけれど、プロトタイプなのにそのへんをめちゃくちゃ頑張る気にはなれないし、とはいっても入手が容易なC#向けのラッパーだとちょっと古かったり、ちょっと不便だったり……。
で、けっきょくUWPアプリをC#で書くことにしました。それでも周回遅れなのかもしれませんが、せっかくの機会ですから少しでも新しい仕組みに追いついておきたいということで。
- UWPアプリ上でMediaCaptureを使ってWebカメラにアクセス
- Webカメラから取り込んだ画像をOpenCVで処理
- 処理した画像を表示


captureElement)を付ける。StretchプロパティをUniformToFillにしておく。 MainPageのOnNavigatedTo(NavigationEventArgs)メソッドをオーバーライドする(awaitな呼び出しを行うので、メソッドにasync修飾子を追加します)。
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
var capture = new MediaCapture();
await capture.InitializeAsync();
var props = capture.VideoDeviceController
.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;
await capture.VideoDeviceController
.SetMediaStreamPropertiesAsync(MediaStreamType.VideoPreview, props);
captureElement.Source = capture;
await capture.StartPreviewAsync();
}
プロジェクトをビルドして起動します。アクセス許可を確認するダイアログが表示された場合は、許可します。
- マイクへのアクセスを許可しますか?→[はい]
- カメラにアクセスすることを許可しますか?→[はい]
