zoukankan      html  css  js  c++  java
  • Webcam in C#: AForge.NET (转) 武胜

    AForge.NET is another C# framework to do image processing and others. For further information just go to http://www.aforgenet.com/framework/

    Here, I want to show you another way to access your webcam using AForge library. I found this library is more complete and so far work for me.

    I can select one of webcams attached in my laptop (I plugged another USB Webcam).. and wow, awesome!

    Now, download and extract the AForge library from http://www.aforgenet.com/framework/downloads.html, download this project here (using VS2005, don’t forget to change the extension from “.doc’ to “.rar”).. and I hope you will have fun with your webcam.

    Also, remember to Add Reference for AForge.Video.dll and AForge.Video.DirectShow.dll into the project.

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

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

    namespace cam_aforge1
    {
    public partial class Form1 : Form
    {
    private bool DeviceExist = false;
    private FilterInfoCollection videoDevices;
    private VideoCaptureDevice videoSource = null;

    public Form1()
    {
    InitializeComponent();
    }

    // get the devices name
    private void getCamList()
    {
    try
    {
    videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
    comboBox1.Items.Clear();
    if (videoDevices.Count == 0)
    throw new ApplicationException();

    DeviceExist = true;
    foreach (FilterInfo device in videoDevices)
    {
    comboBox1.Items.Add(device.Name);
    }
    comboBox1.SelectedIndex = 0; //make dafault to first cam
    }
    catch (ApplicationException)
    {
    DeviceExist = false;
    comboBox1.Items.Add("No capture device on your system");
    }
    }

    //refresh button
    private void rfsh_Click(object sender, EventArgs e)
    {
    getCamList();
    }

    //toggle start and stop button
    private void start_Click(object sender, EventArgs e)
    {
    if (start.Text == "&Start")
    {
    if (DeviceExist)
    {
    videoSource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
    videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
    CloseVideoSource();
    videoSource.DesiredFrameSize = new Size(160, 120);
    //videoSource.DesiredFrameRate = 10;
    videoSource.Start();
    label2.Text = "Device running...";
    start.Text = "&Stop";
    timer1.Enabled = true;
    }
    else
    {
    label2.Text = "Error: No Device selected.";
    }
    }
    else
    {
    if (videoSource.IsRunning)
    {
    timer1.Enabled = false;
    CloseVideoSource();
    label2.Text = "Device stopped.";
    start.Text = "&Start";
    }
    }
    }

    //eventhandler if new frame is ready
    private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
    {
    Bitmap img = (Bitmap)eventArgs.Frame.Clone();
    //do processing here
    pictureBox1.Image = img;
    }

    //close the device safely
    private void CloseVideoSource()
    {
    if (!(videoSource == null))
    if (videoSource.IsRunning)
    {
    videoSource.SignalToStop();
    videoSource = null;
    }
    }

    //get total received frame at 1 second tick
    private void timer1_Tick(object sender, EventArgs e)
    {
    label2.Text = "Device running... " + videoSource.FramesReceived.ToString() + " FPS";
    }

    //prevent sudden close while device is running
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
    CloseVideoSource();
    }
    }
    }

    Snapshots:

    Select webcam source

    Select webcam source

    Seeing into the monitor...

    Seeing into the monitor...


  • 相关阅读:
    设计模式学习工厂模式
    vector详解
    sizeof() c++primer
    list vector
    vc windows 服务问题:服务没有及时响应启动或控制请求
    程序员规范
    c++ map
    省略符形参
    SQL2005附加数据库时遇到的问题:用户组或角色在当前数据库已存在 .
    Socket 阻塞
  • 原文地址:https://www.cnblogs.com/zeroone/p/1711146.html
Copyright © 2011-2022 走看看