程式碼:
using Emgu.CV; using Emgu.CV.CvEnum; using System; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { /// <summary> /// 擷取 /// </summary> private Capture _capture; /// <summary> /// 計數器 /// </summary> private Timer _timer; /// <summary> /// FPS,WebCAM無FPS /// </summary> protected virtual int _fps { get { return _capture.GetCaptureProperty(CapProp.Fps) == 0 ? 30 : Convert.ToInt16(_capture.GetCaptureProperty(CapProp.Fps)); } } /// <summary> /// 影像寬 /// </summary> protected virtual int _width { get { return Convert.ToInt16(_capture.GetCaptureProperty(CapProp.FrameWidth)); } } /// <summary> /// 影像高 /// </summary> protected virtual int _height { get { return Convert.ToInt16(_capture.GetCaptureProperty(CapProp.FrameHeight)); } } public Form1() { InitializeComponent(); _capture = new Capture(); _timer = new Timer(); _timer.Tick += _timer_Tick; pictureBox1.Width = _width; pictureBox1.Height = Height; this.Width = _width; this.Height = _height + this.buttonStart.Height; } /// <summary> /// 按鈕點擊事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStart_Click(object sender, EventArgs e) { var btn = sender as Button; switch (btn.Text) { case "啟動": Start(); break; case "停止": Stop(); break; default: break; } } /// <summary> /// 計數器 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _timer_Tick(object sender, EventArgs e) { try { //將影像給予相框 var frame = _capture.QueryFrame(); pictureBox1.Image = frame.Bitmap; } catch (NullReferenceException ex) { Stop(); MessageBox.Show("請確認電腦是否與視訊鏡頭連接", "注意", MessageBoxButtons.OK); return; } } /// <summary> /// 開始方法 /// </summary> private void Start() { _capture.Start(); _timer.Start(); buttonStart.Text = "停止"; } /// <summary> /// 停止方法 /// </summary> private void Stop() { _capture.Stop(); _timer.Stop(); buttonStart.Text = "啟動"; } } }
執行結果: