一、EmguCV打開相機
引用:Emgu.CV.World (3.1版本後都合成這一個)
Capture _capture=new Caputure(0); 這裡面的0代表第幾個相機。根據名稱擷取對應相機,嘗試了很久都沒成功。
_capture.ImageGrabbed += newframe;抓取事件,也可以用Application.Idle挂載事件,用過感覺沒ImageGrabbed穩定。
_capture.Start();//開始運作相機
以下是抓取事件代碼
private void newframe(object sender, EventArgs e)
{
Mat scr = new Mat();
_capture.Retrieve(scr, 0);
Image<Bgr, byte> des = scr.ToImage<Bgr, byte>();
pictureBox1.Image = des.ToBitmap();//擷取到的圖像傳給pictureBox1.Image
}
二、AForge.Video.DirectShow打開相機
引用:AForge.Video.DirectShow、AForge.Video(直接在NuGet裡搜尋AForge.Video.DirectShow安裝)
FilterInfoCollection _Devices = new FilterInfoCollection(FilterCategory.VideoInputDevice);//搜尋所有輸入裝置,這裡FilterCategory.VideoInputDevice是指影像輸入裝置。
根據選擇對應名稱打開相機
foreach (FilterInfo item in _Devices)
{
if (item.Name == comboBox_Camera.Text)
{
VideoCaptureDevice _videoCaptureDevice = new VideoCaptureDevice(item.MonikerString);//初始化一個相機執行個體
_videoCaptureDevice.NewFrame += new NewFrameEventHandler(videoCaptureDevice_NewFrame);//抓幀事件
_videoCaptureDevice.Start();//開始運作相機
break;
}
}
以下是抓取事件代碼
private void videoCaptureDevice_NewFrame(object sender, NewFrameEventArgs e)
{
Bitmap bit = (Bitmap)e.Frame.Clone();//複制一個副本給bit
pictureBox1.Image = bit;//擷取到的圖像傳給pictureBox1.Image
}
有人喜歡用AForge.controls裡的 VideoSourcePlayer這個控件來擷取圖像,這邊就不寫了,方法網上很多。本人還是喜歡自帶的pictureBox顯示圖像。
推薦使用AForge.Video.DirectShow,這樣可以擷取到相機清單,自由選擇。
(沒圖沒真相)