C#学习之 调用 AForge.NET Framework 启动摄像头
2015-10-22 00:30
513 查看
今天开始捣鼓C#启动摄像头,之前做过用 C++调用OPENCV库启动摄像头,C#理论上也可以。 但是看了
这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊。
之前,我就直到OPENCV可以办到。惭愧,自己的知识面太窄了
。
当然,今天的重头戏是 AForge.NET Framework 。
先来看个我鼓捣出来的一个简单实例吧:
由于是晚上嘛,光线不太好哦。导致看起来画质不够好。
功能其实很简单,打开摄像头,捕获每一帧图像
AForge.Imaging —— 一些日常的图像处理和过滤器
AForge.Vision —— 计算机视觉应用类库
AForge.Neuro —— 神经网络计算库AForge.Genetic -进化算法编程库
AForge.MachineLearning —— 机器学习类库
AForge.Robotics —— 提供一些机器人的工具类库
AForge.Video —— 一系列的视频处理类库
AForge.Fuzzy —— 模糊推理系统类库
AForge.Controls—— 图像,三维,图表显示控件
下载连接:http://www.aforgenet.com/framework/downloads.html
2,添加引用。
添加的DLL的名称有:
AForge.Video.DirectShow.dll
AForge.Video.dll
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);
}
}
这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊。
之前,我就直到OPENCV可以办到。惭愧,自己的知识面太窄了
。
当然,今天的重头戏是 AForge.NET Framework 。
先来看个我鼓捣出来的一个简单实例吧:
由于是晚上嘛,光线不太好哦。导致看起来画质不够好。
功能其实很简单,打开摄像头,捕获每一帧图像
--------- AForge.NET Framework 介绍
1,简介
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域。2,主要架构
这个框架由一系列的类库组成。主要包括有: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
----------------在VS中添加引用
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);
}
}
--------窗口的Load函数源码
//--窗口加载事件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();
}
---------窗口的FormClosed事件源码
///---窗口关闭事件
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); } } } }
相关文章推荐
- c#调用COM组件
- C#实现把指定数据写入串口
- C#动态创建button的方法
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#使用加边法计算行列式的值
- C#实现多线程的同步方法实例分析
- C#中尾递归的使用、优化及编译器优化
- C#实现子窗体与父窗体通信方法实例总结
- C#通用邮件发送类分享
- C#中this的用法集锦
- C#.NET获取拨号连接的宽带连接方法
- C#异步绑定数据实现方法
- C#实现AddRange为数组添加多个元素的方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#实现基于链表的内存记事本实例
- C#托管堆对象实例包含内容分析