天天看點

EmguCV和AForge.Video.DirectShow打開相機

一、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,這樣可以擷取到相機清單,自由選擇。

(沒圖沒真相)

繼續閱讀