今天开始捣鼓C#启动摄像头,之前做过用 C++调用OPENCV库启动摄像头,C#理论上也可以。 但是看了 这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊。之前,我就直到OPENCV可以办到。惭愧,自己的知识面太窄了 。
当然,今天的重头戏是 AForge.NET Framework 。
先来看个我鼓捣出来的一个简单实例吧:
由于是晚上嘛,光线不太好哦。导致看起来画质不够好。
功能其实很简单,打开摄像头,捕获每一帧图像
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域。
这个框架由一系列的类库组成。主要包括有:
AForge.Imaging —— 一些日常的图像处理和过滤器
AForge.Vision —— 计算机视觉应用类库
AForge.Neuro —— 神经网络计算库AForge.Genetic -进化算法编程库
AForge.MachineLearning —— 机器学习类库
AForge.Robotics —— 提供一些机器人的工具类库
AForge.Video —— 一系列的视频处理类库
AForge.Fuzzy —— 模糊推理系统类库
AForge.Controls—— 图像,三维,图表显示控件
现在,版本已更新到2.2.5了。
下载连接:http://www.aforgenet.com/framework/downloads.html
1,新建一个C#窗口引用程序。在工具箱中拖一个按钮控件 和 一个pictureBox控件。空间位置和大小自定。
2,添加引用。
添加的DLL的名称有:
AForge.Video.DirectShow.dll AForge.Video.dll
using AForge.Video.DirectShow; using AForge.Video;
///---声明变量 public FilterInfoCollection USE_Webcams = null; public VideoCaptureDevice cam = null;
//---按钮被单击事件 private void startBtn_Click(object sender, EventArgs e) { try { if (startBtn.Text == "开始") { ///-- startBtn.Text = "停止"; ///---启动摄像头 cam.Start(); } else { ///--设置按钮提示字样 startBtn.Text = "开始"; ///--停止摄像头捕获图像 cam.Stop(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
//--窗口加载事件 private void Form1_Load(object sender, EventArgs e) { try { ///---实例化对象 USE_Webcams = new FilterInfoCollection(FilterCategory.VideoInputDevice); ///---摄像头数量大于0 if (USE_Webcams.Count > 0) { ///---禁用按钮 startBtn.Enabled = true; ///---实例化对象 cam = new VideoCaptureDevice(USE_Webcams[0].MonikerString); ///---绑定事件 cam.NewFrame += new NewFrameEventHandler(Cam_NewFrame); } else { ///--没有摄像头 startBtn.Enabled = false; ///---提示没有摄像头 MessageBox.Show("没有摄像头外设"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }这里自定义了一个函数,源码如下:
///------自定义函数 private void Cam_NewFrame(object obj, NewFrameEventArgs eventArgs) { pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone(); ///---throw new NotImplementedException(); }
///---窗口关闭事件 private void Form1_FormClosed(object sender, FormClosedEventArgs e) { try { if (cam != null) { ///---关闭摄像头 if (cam.IsRunning) { cam.Stop(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; ///---添加名称空间 using AForge.Video.DirectShow; using AForge.Video; namespace OS_webcam { public partial class Form1 : Form { public Form1() { InitializeComponent(); } ///---声明变量 public FilterInfoCollection USE_Webcams = null; public VideoCaptureDevice cam = null; //---按钮被单击事件 private void startBtn_Click(object sender, EventArgs e) { try { if (startBtn.Text == "开始") { ///-- startBtn.Text = "停止"; ///---启动摄像头 cam.Start(); } else { ///--设置按钮提示字样 startBtn.Text = "开始"; ///--停止摄像头捕获图像 cam.Stop(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } //--窗口加载事件 private void Form1_Load(object sender, EventArgs e) { try { ///---实例化对象 USE_Webcams = new FilterInfoCollection(FilterCategory.VideoInputDevice); ///---摄像头数量大于0 if (USE_Webcams.Count > 0) { ///---禁用按钮 startBtn.Enabled = true; ///---实例化对象 cam = new VideoCaptureDevice(USE_Webcams[0].MonikerString); ///---绑定事件 cam.NewFrame += new NewFrameEventHandler(Cam_NewFrame); } else { ///--没有摄像头 startBtn.Enabled = false; ///---提示没有摄像头 MessageBox.Show("没有摄像头外设"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } ///------自定义函数 private void Cam_NewFrame(object obj, NewFrameEventArgs eventArgs) { pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone(); ///---throw new NotImplementedException(); } ///---窗口关闭事件 private void Form1_FormClosed(object sender, FormClosedEventArgs e) { try { if (cam != null) { ///---关闭摄像头 if (cam.IsRunning) { cam.Stop(); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }