概述
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。本文主要讲解利用AForge进行图像采集的相关内容【包括拍照,视频录制】,仅供学习分享使用。
AForge.Net相关类库介绍
- AForge.dll 是框架的核心基础类库,为其他类库提供服务。
- AForge.Controls.dll 包含AForge.Net的UI控件,主要用于页面显示。
- AForge.Imaging.dll 主要是框架中用于图像处理的类库,主要负责图像的处理
- AForge.Video.dll 主要是框架中对视频处理的类库。
- AForge.Video.DirectShow.dll 主要是通过DirectShow接口访问视频资源的类库。
- AForge.Video.FFMPEG.dll 是一个还未正式发布的类库,通过FFMPEG类库对视频进行读写。
通过NuGet管理器引入AForge类库
项目名称右键-->管理NuGet程序包,打卡NuGet包管理器 如下所示:
示例效果图
本示例主要包括打开,关闭摄像头,拍照,连续拍照,开始录制视频,暂停录制视频,停止录视频,退出等功能。
如下所示:左侧为摄像头投影区域,右侧为图像控件,显示拍照所得的图片
核心代码
获取视频设备列表以及设备对应的分辨率
1 /// <summary> 2 /// 页面加载摄像头设备 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void FrmMain_Load(object sender, EventArgs e) 7 { 8 try 9 { 10 this.lblTime.Text = ""; 11 // 枚举所有视频输入设备 12 videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); 13 if (videoDevices.Count == 0) 14 { 15 lblStatus.Text = "No local capture devices"; 16 } 17 foreach (FilterInfo device in videoDevices) 18 { 19 int i = 1; 20 cmbDevices.Items.Add(device.Name); 21 lblStatus.Text = ("摄像头" + i + "初始化完毕..." + "\n"); 22 i++; 23 } 24 cmbDevices.SelectedIndex = 0; 25 } 26 catch (ApplicationException) 27 { 28 this.lblStatus.Text = "No local capture devices"; 29 videoDevices = null; 30 } 31 } 32 33 private void cmbDevices_SelectedIndexChanged(object sender, EventArgs e) 34 { 35 this.cmbResolution.Items.Clear(); 36 videoSource = new VideoCaptureDevice(videoDevices[cmbDevices.SelectedIndex].MonikerString); 37 foreach(var cap in videoSource.VideoCapabilities) { 38 this.cmbResolution.Items.Add(string.Format("({0},{1})",cap.FrameSize.Width,cap.FrameSize.Height)); 39 } 40 if (this.cmbResolution.Items.Count > 0) 41 { 42 this.cmbResolution.SelectedIndex = 0; 43 } 44 }