OpenCvSharp でC#で組めるのはいいですね。中のソースを少し見てみましたが、shimatさんに感謝!
OpenCv のPython のチュートリアルに近い形で実装した場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
private void ShowVideo() { VideoCapture cap = new VideoCapture(0); image1.Width = cap.FrameWidth; image1.Height = cap.FrameHeight; Mat img = new Mat(); while (true) { cap.Read(img); if (cap.IsOpened()) { image1.Source = BitmapSourceConverter.ToBitmapSource(img); } if (Cv2.WaitKey(30) == 27) { break; } } img.Release(); cap.Release(); this.Close(); } |
これだとキー待ちでループして気持ち悪いので、もう少し C# らしく書くと、こんな感じかな。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
VideoCapture cap = null; Mat img = new Mat(); private void ShowVideo2(object sender, EventArgs e) { cap.Read(img); image1.Source = BitmapSourceConverter.ToBitmapSource(img); } private void Image1_Loaded(object sender, RoutedEventArgs e) { cap = new VideoCapture(0); if (!cap.IsOpened()) { MessageBox.Show("Video のオープンに失敗しました", "VideoCapture エラー", MessageBoxButton.OK, MessageBoxImage.Error); return; } image1.Width = cap.FrameWidth; image1.Height = cap.FrameHeight; DispatcherTimer timer = new DispatcherTimer(); timer.Tick += ShowVideo2; timer.Interval = TimeSpan.FromMilliseconds(30); timer.Start(); } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { img.Release(); cap.Release(); } |