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

          今天开始捣鼓C#启动摄像头,之前做过用 C++调用OPENCV库启动摄像头,C#理论上也可以。 但是看了    这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊。大笑之前,我就直到OPENCV可以办到。惭愧,自己的知识面太窄了 。

           当然,今天的重头戏是  AForge.NET Framework 。

           先来看个我鼓捣出来的一个简单实例吧:

C#学习之 调用 AForge.NET Framework 启动摄像头_第1张图片

  由于是晚上嘛,光线不太好哦。导致看起来画质不够好。大笑

     功能其实很简单,打开摄像头,捕获每一帧图像

--------- 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

C#学习之 调用 AForge.NET Framework 启动摄像头_第2张图片

----------------在VS中添加引用

        1,新建一个C#窗口引用程序。在工具箱中拖一个按钮控件 和 一个pictureBox控件。空间位置和大小自定。

         2,添加引用。

         添加的DLL的名称有:

AForge.Video.DirectShow.dll
AForge.Video.dll

C#学习之 调用 AForge.NET Framework 启动摄像头_第3张图片

------------添加名称空间

using AForge.Video.DirectShow;
using AForge.Video;

------------添加类属性

 

 ///---声明变量
        public FilterInfoCollection USE_Webcams = null;
        public VideoCaptureDevice cam = null;

C#学习之 调用 AForge.NET Framework 启动摄像头_第4张图片

--------------按钮被单击事件代码

        //---按钮被单击事件
        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事件源码

C#学习之 调用 AForge.NET Framework 启动摄像头_第5张图片

       ///---窗口关闭事件
        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#学习之 调用 AForge.NET Framework 启动摄像头_第6张图片

------完整源码如下

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#,Aforge,打开摄像头,捕获每一帧图像)