博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Emgucv(一)Aforge切换摄像头并调用摄像头属性
阅读量:5280 次
发布时间:2019-06-14

本文共 3555 字,大约阅读时间需要 11 分钟。

一、新建一个Windows窗体应用程序,在Form1窗体上添加一个PictureBox控件、一个ComboBox控件,命名为PictureBox1、cbCapture,还有两个Button控件,Text分别为切换和摄像头属性,Name分别为btnStart和btnConfig,其界面如下:

二、在该项目下的“引用”处右击选择“添加引用”,添加 AForge.Video.dll 和 AForge.Video.DirectShow.dll 两个程序集

三、双击两个Button按钮以及触发窗体的Load和Closing事件,代码如下:

1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 using AForge.Video.DirectShow;10 using AForge.Video;11 using System.Diagnostics;12 13 namespace Aforge调用摄像头14 {15     public partial class Form1 : Form16     {17         public Form1()18         {19             InitializeComponent();20         }21 22         private void Form1_Load(object sender, EventArgs e)23         {24             try25             {26                 videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);//枚举所有的视频输入设备27                 if (videoDevices.Count == 0)28                     throw new ApplicationException();29                 foreach (FilterInfo device in videoDevices)30                 {31                     cbCapture.Items.Add(device.Name);//把所有的视频设备添加到下拉框中32                 }33                 cbCapture.SelectedIndex = 0;34                 videoSource = new VideoCaptureDevice(videoDevices[cbCapture.SelectedIndex].MonikerString);//摄像头的名称35                 videoSource.DesiredFrameSize = new Size(500, 300);//设置大小36                 videoSource.DesiredFrameRate = 1;//设置帧率37                 videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);38                 videoSource.Start();39             }40             catch (Exception ex)41             {42                 MessageBox.Show(ex.Message);43             }44         }45         private FilterInfoCollection videoDevices;46         private VideoCaptureDevice videoSource;47         private void btnStart_Click(object sender, EventArgs e)48         {49             videoSource.Stop();50             videoSource = new VideoCaptureDevice(videoDevices[cbCapture.SelectedIndex].MonikerString);//摄像头的名称51             videoSource.DesiredFrameSize = new Size(500, 300);//设置大小52             videoSource.DesiredFrameRate = 1;//设置帧率53             videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);  54             videoSource.Start();55         }56         private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)57         {58             Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();59             pictureBox1.Image = bitmap;60         }61 62         private void btnConfig_Click(object sender, EventArgs e)63         {64             if ((videoSource != null) && (videoSource is VideoCaptureDevice))65             {66                 try67                 {68                     ((VideoCaptureDevice)videoSource).DisplayPropertyPage(this.Handle);69                 }70                 catch (NotSupportedException ex)71                 {72                     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);73                 }74             }75         }76 77         private void Form1_FormClosing(object sender, FormClosingEventArgs e)78         {79             Process p = Process.GetCurrentProcess();80             if (p.HasExited == false)81             {82                 p.Kill();83             }84         }         85     }86 }
View Code

注意:如果在关闭窗体是不把这个进程给结束掉,那么下次再次调用的时候就会出现程序正在运行中的错误或者在窗体加载时不能调用处摄像头;此外,摄像头必须是无驱的

四、效果图

转载于:https://www.cnblogs.com/weizhengLoveMayDay/p/3319568.html

你可能感兴趣的文章
poj 1684 Lazy Math Instructor(字符串)
查看>>
20172322 2017-2018-2《程序设计与数据结构》(上)课程总结
查看>>
什么是EDID,EDID能做什么,EDID基本介绍
查看>>
JavaScript面向对象
查看>>
matlab中生成随机数的相关知识
查看>>
let与const心智模型
查看>>
1009. Product of Polynomials (25)
查看>>
【dp 背包变形】 poj 1837
查看>>
面向对象设计原则之里氏代换原则【转载】
查看>>
iOS 开发者必不可少的 75 个工具,你都会了吗
查看>>
Hdu 1029 Ignatius and the Princess IV
查看>>
走进AngularJs(一)angular基本概念的认识与实战
查看>>
以STM32和FPGA为核心的多组件协调工作系统
查看>>
Java中死锁的定位与修复
查看>>
Oracle 11 g 2R安装以及sql Development
查看>>
剑桥offer(11~20)
查看>>
测试用例之等价类划分法
查看>>
常用资料管理
查看>>
Struts2中国际化
查看>>
MySql允许远程访问
查看>>