一、調用攝像頭的基本概念
在使用C#調用攝像頭時需要使用到的主要類是Camera類和VideoCapture類。Camera類是一個高級的視頻捕獲類,支持指定解析度和楨速,同時還能夠實時預覽;VideoCapture類是OpenCV中一個封裝了視頻捕獲設備和視頻文件的類,基本上支持大部分的視頻捕獲需求。
二、調用攝像頭的準備工作
在調用攝像頭之前,需要進行以下準備工作:
1、安裝視頻捕獲設備的驅動程序,例如常見的USB攝像頭和筆記本自帶的攝像頭都需要進行安裝驅動程序;
2、安裝OpenCV庫,在C#中使用OpenCV調用攝像頭需要將OpenCV庫配置到項目中;
3、設置項目的引用,在Visual Studio中先添加引用,然後再添加以下命名空間:
using OpenCV.Net; using OpenCV.Net.Native; using System; using System.Threading; using System.Windows.Forms;
三、調用攝像頭的具體實現
1、使用Camera類調用攝像頭
使用Camera類調用攝像頭,需要進行以下步驟:
1、設置視頻捕獲設備的編號。如果只有一個設備,可以設置為0;
2、設置視頻解析度和楨速;
3、初始化Camera類;
4、在Windows Form的Paint事件中設置預覽尺寸和位置;
5、在Windows Form的Paint事件中調用Camera類的Show函數即可實現預覽。
以下是示例代碼:
using OpenCvSharp; private Camera _cam; private Thread _thread; private void Form1_Load(object sender, EventArgs e) { _cam = new Camera(); _cam.Device = 0; _cam.Width = 640; _cam.Height = 480; _cam.Fps = 30; _cam.Start(); _thread = new Thread(() => { while (_cam.IsRunning) { var mat = _cam.QueryFrame(); if (mat != null) { var bmp = mat.ToBitmap(); Invoke(new Action(() => { pictureBox1.Image = bmp; pictureBox1.Refresh(); })); } Thread.Sleep(10); } }); _thread.IsBackground = true; _thread.Start(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (_cam?.IsRunning ?? false) { _cam.Stop(); _thread.Join(); } } private void pictureBox1_Paint(object sender, PaintEventArgs e) { if (_cam?.IsRunning ?? false) { var src = _cam.QueryFrame(); if (src != null) { float dx = (float)Width / src.Width; float dy = (float)Height / src.Height; e.Graphics.DrawImage(src.ToBitmap(), 0, 0, Width, Height); } } }
2、使用VideoCapture類調用攝像頭
使用VideoCapture類調用攝像頭,可以調用參數為設備編號的構造函數,也可以調用參數為文件路徑的構造函數。以下是示例代碼:
using OpenCvSharp; var cap = new VideoCapture(0); if (!cap.IsOpened()) { MessageBox.Show("攝像頭打開失敗!"); return; } Mat frame = new Mat(); while (true) { cap.Read(frame); if (frame.Empty()) break; Cv2.ImShow("Camera", frame); Cv2.WaitKey(1); } cap.Release(); Cv2.DestroyAllWindows();
四、小結
C#調用攝像頭的方式有很多種,使用Camera類和VideoCapture類都可以輕鬆實現。但在實際應用中需要根據自己的需求選擇合適的方式並調整相應的參數。
原創文章,作者:XASRC,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/370748.html