C#使用AForge实现调用摄像头的示例详解

 更新时间:2023年11月14日 09:01:24   作者:SongYuLong的博客  
AForge是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,本文为大家介绍了C#使用AForge实现调用摄像头的相关教程,需要的可以了解下

AForge官网

安装AForge

Visual Studio 2022=>项目=>管理NuGet程序包,搜索AForge并依次安装作者为AForge.NET的多个关联组件。

使用AForge控件

安装AForge组件完成后,工具箱会新增AForge控件,将VideoSourcePlayer拖拽到Form控件区域即可。

1.定义变量

private FilterInfoCollection filterInfoCollection; // 摄像头设备集合
private VideoCaptureDevice videoCaptureDevice; // 捕获设备源
Bitmap bmp; // 处理图片

2.获取PC端所有摄像头集合

filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);

3.设置视频源并启动

videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[0].MonikerString);
videoSourcePlayer1.VideoSource = videoCaptureDevice;
videoSourcePlayer1.Start();

4.获取一帧摄像头数据

bmp = videoSourcePlayer1.GetCurrentVideoFrame(); // 拍照

5.关闭视频源

if (videoSourcePlayer1.VideoSource != null)
{
videoSourcePlayer1.SignalToStop();
videoSourcePlayer1.WaitForStop();
videoSourcePlayer1.VideoSource = null;
}

示例代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

namespace CameraDemo
{
    public partial class Form1 : Form
    {
        private FilterInfoCollection filterInfoCollection; // 摄像头设备集合
        private VideoCaptureDevice videoCaptureDevice;  // 捕获设备源
        Bitmap bmp; // 处理图片

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            // 检测PC端所有摄像头
            filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            MessageBox.Show("识别到:" + filterInfoCollection.Count.ToString() +"个摄像头");

            comboBox1.Items.Add(filterInfoCollection[0].MonikerString);
        }

        private void CloseCamera()
        {
            if (videoSourcePlayer1.VideoSource != null)
            { 
                videoSourcePlayer1.SignalToStop();
                videoSourcePlayer1.WaitForStop();
                videoSourcePlayer1.VideoSource = null;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                TimeSpan now = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                long t = Convert.ToInt64(now.TotalMilliseconds)/1000;
                bmp.Save(string.Format(@"D:\{0}.jpg", t.ToString()));
                MessageBox.Show("保存成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }            
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            CloseCamera();

            if (comboBox1.SelectedIndex == 0 && filterInfoCollection.Count > 0)
            {
                videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[0].MonikerString);
            }
            else if (comboBox1.SelectedIndex == 1 && filterInfoCollection.Count > 1)
            {
                videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[1].MonikerString);
            }
            else {
                MessageBox.Show("摄像头选择有误");
                return;
            }

            videoSourcePlayer1.VideoSource = videoCaptureDevice;
            videoSourcePlayer1.Start();

            button1.Enabled = true;
            button2.Enabled = true;
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            CloseCamera();
        }

        /// <summary>
        /// 拍照
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            bmp = videoSourcePlayer1.GetCurrentVideoFrame(); // 拍照
            pictureBox1.Image = bmp;            
        }
    }
}

以上就是C#使用AForge实现调用摄像头的示例详解的详细内容,更多关于C# AForge调用摄像头的资料请关注脚本之家其它相关文章!

相关文章

  • Unity使用DoTween实现抛物线效果

    Unity使用DoTween实现抛物线效果

    这篇文章主要为大家详细介绍了Unity使用DoTween实现抛物线效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C# 使用SharpZipLib生成压缩包的实例代码

    C# 使用SharpZipLib生成压缩包的实例代码

    SharpZipLib是一个C#的类库,主要用来解压缩Zip,GZip,BZip2,Tar等格式,是以托管程序集的方式实现,可以方便的应用于其他的项目之中。本文通过一个实例代码给大家介绍了C# 使用SharpZipLib生成压缩包的方法,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • C#自动删除Word文档空白行和空白页的完整代码

    C#自动删除Word文档空白行和空白页的完整代码

    在处理 Word 文档时,经常会遇到空白行、空表格或空白页的问题,这不仅影响排版美观,还可能导致文档页数冗余,所以本文将介绍如何使用 Spire.Doc for .NET 在 C# 中自动删除 Word 文档的空白行、空表格和空白页,需要的朋友可以参考下
    2025-08-08
  • C#实现Winform序在系统托盘显示图标和开机自启动

    C#实现Winform序在系统托盘显示图标和开机自启动

    这篇文章主要为大家详细介绍了C#如何实现Winform序在系统托盘显示图标和开机自启动功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-01-01
  • C#实现Access通用访问类OleDbHelper完整实例

    C#实现Access通用访问类OleDbHelper完整实例

    这篇文章主要介绍了C#实现Access通用访问类OleDbHelper,结合完整实例形式分析了C#针对access数据库的连接、查询、遍历、分页显示等相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • C#语言async await之迭代器工作原理示例解析

    C#语言async await之迭代器工作原理示例解析

    这篇文章主要为大家介绍了C#语言async await之迭代器工作原理示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • C#控制Excel Sheet使其自适应页宽与列宽的方法

    C#控制Excel Sheet使其自适应页宽与列宽的方法

    这篇文章主要介绍了C#控制Excel Sheet使其自适应页宽与列宽的方法,涉及C#操作Excel的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • C#实现选择排序

    C#实现选择排序

    这篇文章介绍了C#实现选择排序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C#中线程安全问题的调试和解决

    C#中线程安全问题的调试和解决

    在C#中,多线程编程是一种常见且强大的工具,但它带来了线程安全的问题,本文将介绍如何调试和解决C#中的线程安全问题,并深入探讨锁机制、并发控制以及调试的最佳实践,需要的朋友可以参考下
    2025-03-03
  • C#基于QRCode实现动态生成自定义二维码图片功能示例

    C#基于QRCode实现动态生成自定义二维码图片功能示例

    这篇文章主要介绍了C#基于QRCode实现动态生成自定义二维码图片功能,结合实例形式分析了C#使用QRCode动态生成二维码图片相关操作技巧,需要的朋友可以参考下
    2019-02-02

最新评论