C#用Aforge.net类库调用摄像头实现监控或者拍照功能

在项目里有个功能需要调取监视器实现摄像功能,在网上找到了一些Demo虽然也没看太懂,但是基本功能还是做到了,在此做个笔记。
本文源码下载地址:https://download.csdn.net/download/qq_42757964/12259466
AForge引用类包下载地址:https://download.csdn.net/download/qq_42757964/12255300
简单示例:
在这里插入图片描述在这里插入图片描述

下面进行详细步骤说明:

1,首先我们创建Monitorr项目:
在这里插入图片描述
2.将需要的dll文件复制到Debug目录下。
在这里插入图片描述
3.将引用添加进项目(选择浏览找到你刚刚存放的对应位置的.dll文件)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
4.添加成功后,在右侧工具栏创建一个Camera文件夹(也可以不创建直接将这些别人写好的自己定义控件拖拽到这里),将其拖拽过来。这一步的目的是将dll文件转化为可直接拖拽到Form窗口的控件
在这里插入图片描述在这里插入图片描述
拖拽过来之后你就能直接看到控件了,但据部分同学反映有的是拖拽不过来,有的是拖拽过来之后并没有变成控件形式,而是变成了一个个文本文件像下面这样:
在这里插入图片描述
因为每个VS版本或者电脑系统有差异性,在此我也不能完全料想到有哪些错误,因此大家如果做到这一步发现出现某些问题的话,请自行百度 谷歌。在这给大家例举一些我在网上看到的一些方法吧~(仅供参考):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.总之正常来说,拖拽到工具栏之后,就你就能看到:
在这里插入图片描述
那么接下来,你需要把VideoSourcePlayer控件拖拽到窗口上。
在拖拽我们需要的三个button和一个combobox
在这里插入图片描述
6.我们计划在button1的事件中去搜寻当前设备连接上的所有监控设施,并将其列举在下拉列表中。

工具类:

public FilterInfoCollection GetDevices()
        {
            try
            {
                //枚举所有视频输入设备
                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                if (videoDevices.Count != 0)
                {
                    // LogClass.WriteFile("已找到视频设备.");
                    MessageBox.Show("已经找到设备");
                    return videoDevices;
                }
                else
                    return null;
            }
            catch (Exception ex)
            {
                // LogClass.WriteFile("error:没有找到视频设备!具体原因:" + ex.Message);
                MessageBox.Show("没有找到视频设备");

                return null;
            }
        }

Button1点击事件:

 // 枚举所有视频输入设备

                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

                if (videoDevices.Count == 0)

                    throw new ApplicationException();

                foreach (FilterInfo device in videoDevices)

                {

                    comboBox1.Items.Add(device.Name);

                }

                comboBox1.SelectedIndex = 0;
}

Button2中去打开你在列表中选择的设备:


  //连接摄像头

        private void CameraConn()

        {

            VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);

            videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);

            videoSource.DesiredFrameRate = 1;

            videoSourcePlayer1.VideoSource = videoSource;

            videoSourcePlayer1.Start();

        }


Button3中选择让其停止且等待:

videoSourcePlayer1.SignalToStop();
videoSourcePlayer1.WaitForStop();//而非彻底关闭

然后就OK啦!(在下拉搜索列表里,你能看的你当前设备上所有链接到的监控设施,ps:因为当前我的笔记本上只有这一个摄像头所以就索引到了这一个~):
在这里插入图片描述


完整代码:
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.Imaging;
using AForge.Video;
using AForge.Video.DirectShow;

using System.Drawing.Imaging;

namespace Monitorr
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        //监控设施的选择
        private FilterInfoCollection videoDevices;
        private VideoCaptureDevice videoSource;



        public int selectedDeviceIndex = 0;



        public FilterInfoCollection GetDevices()
        {
            try
            {
                //枚举所有视频输入设备
                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
                if (videoDevices.Count != 0)
                {
                    // LogClass.WriteFile("已找到视频设备.");
                    MessageBox.Show("已经找到设备");
                    return videoDevices;
                }
                else
                    return null;
            }
            catch (Exception ex)
            {
                // LogClass.WriteFile("error:没有找到视频设备!具体原因:" + ex.Message);
                MessageBox.Show("没有找到视频设备");

                return null;
            }
        }


        //连接摄像头

        private void CameraConn()

        {

            VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);

            videoSource.DesiredFrameSize = new System.Drawing.Size(320, 240);

            videoSource.DesiredFrameRate = 1;

            videoSourcePlayer1.VideoSource = videoSource;

            videoSourcePlayer1.Start();

        }
        private void button1_Click(object sender, EventArgs e)
        {
            try

            {

                // 枚举所有视频输入设备

                videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);

                if (videoDevices.Count == 0)

                    throw new ApplicationException();



                foreach (FilterInfo device in videoDevices)

                {

                    comboBox1.Items.Add(device.Name);

                }

                comboBox1.SelectedIndex = 0;

            }

            catch (ApplicationException)

            {

                comboBox1.Items.Add("No local capture devices");

                videoDevices = null;

            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (button2.Text == "打开监控")
            {
                if (comboBox1.Text != null)
                {
                    CameraConn();
                }
                else
                {
                    MessageBox.Show("---------");
                }
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            videoSourcePlayer1.SignalToStop();

            videoSourcePlayer1.WaitForStop();
        }
    }
}


参考博客:
https://blog.csdn.net/special00/article/details/82629916
https://blog.csdn.net/chenhongwu666/article/details/40594365
https://blog.csdn.net/zwb_578209160/article/details/80309377

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AForge.NET是一个开源的图像和视频处理框架,它提供了一系列功能强大的工具和类库,用于处理图像和视频数据。要使用AForge.NET设置相机的增益,可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中引用了AForge.NET的程序集。你可以通过NuGet包管理器来安装AForge.NET。 2. 创建一个相机对象,并连接到相机设备。你可以使用AForge.NET提供的`VideoCaptureDevice`类来实现这一步骤。例如: ```csharp VideoCaptureDevice camera = new VideoCaptureDevice(); // 创建相机对象 camera.VideoSource = new VideoCaptureDevice("相机设备名称"); // 设置相机设备名称 camera.Start(); // 连接到相机设备 ``` 3. 设置相机的增益。AForge.NET提供了`CameraControl`类来控制相机的各种参数,包括增益。你可以使用`CameraControl`类的`SetVideoProperty`方法来设置增益值。例如: ```csharp CameraControl cameraControl = new CameraControl(camera); // 创建CameraControl对象 cameraControl.SetVideoProperty(VideoProcAmpProperty.Gain, 增益值); // 设置增益值 ``` 请注意,`增益值`是一个浮点数,表示相机的增益值。具体的增益范围和单位可能因相机设备而异,请参考相机设备的文档或说明。 4. 最后,记得在不需要使用相机时,关闭相机连接。可以使用`Stop`方法来停止相机连接。例如: ```csharp camera.Stop(); // 停止相机连接 ``` 以上就是使用AForge.NET设置相机增益的基本步骤。如果你有其他相关问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值