您的位置:首页 > 编程语言 > C#

C#学习之 调用 AForge.NET Framework 启动摄像头

2015-10-22 00:30 513 查看
          今天开始捣鼓C#启动摄像头,之前做过用 C++调用OPENCV库启动摄像头,C#理论上也可以。 但是看了  
 这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊。

之前,我就直到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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息