zoukankan      html  css  js  c++  java
  • C# 调用AForge类库操作摄像头

    很多都是C#调用window API 发送SendMessage,实现操作摄像头,但是C#调用window API的时候因为驱动的问题,总是弹出视频选择对话框,让人很是无语,看到大牛们有的截获到了window消息,然后模拟点击确定按钮,这是在是不敢恭维啊,还有的大牛根据API原型重写了,至于我是一只IT小小鸟了,然后在继续百度,找到了一个AForge强大的C#类库,最后终于搞定了,接下来将我拙劣的代码部分贴出来,以便同行或者需要的朋友学习交流,

    首先用到AForge类库下载地址:http://www.aforgenet.com/

    然后引用AForge,AForge.Controls(这个是控件,可以添加到工具箱中),AForge.Imaging,AForge.Video,AForge.Video.DirectShow;

    然后直接上代码

    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("已找到视频设备.");
                        return videoDevices;
                    }
                    else
                        return null;
                }
                catch (Exception ex)
                {
                    LogClass.WriteFile("error:没有找到视频设备!具体原因:" + ex.Message);
                    return null;
                }
            }

    选择设备,然后连接摄像头

    <p> /// <summary>
            /// 连接视频摄像头
            /// </summary>
            /// <param name="deviceIndex"></param>
            /// <param name="resolutionIndex"></param>
            /// <returns></returns>
            public VideoCaptureDevice VideoConnect(int deviceIndex = 0, int resolutionIndex = 0)
            {
                if (videoDevices.Count <= 0)
                    return null;
                selectedDeviceIndex = deviceIndex;
                videoSource = new VideoCaptureDevice(videoDevices[deviceIndex].MonikerString);</p><p>            return videoSource;
            }</p>
    //抓图,拍照,单帧

    public void GrabBitmap(string path)
    {
    if (videoSource == null)
    return;
    g_Path = path;
    videoSource.NewFrame += new NewFrameEventHandler(videoSource_NewFrame);
    }

    void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
    {
    Bitmap bmp = (Bitmap)eventArgs.Frame.Clone();
    string fullPath = path + "temp\";
    if (!Directory.Exists(fullPath))
    Directory.CreateDirectory(fullPath);
    string img = fullPath + DateTime.Now.ToString("yyyyMMdd hhmmss") + ".bmp";
    bmp.Save(img);
    //如果这里不写这个,一会儿会不停的拍照,
    videoSource.NewFrame -= new NewFrameEventHandler(videoSource_NewFrame);
    }

    这样就完成了操作摄像头的工作

    但是发现一个问题,如果要拍照得到的照片先要处理在保存,这里就有问题了,所以需要在界面前台中添加控件,医用AForge.Controls,然后添加到工具箱,然后将VideoSourcePlayer控件拖到窗体中,想要得到单张图像处理:

    Bitmap bmp = videoSourcePlayer1.GetCurrentFrame();

    这样就可以拿来处理了,AForge类库是非常的强大,这里只是冰山一角,文章不足之处还请大家多多指正,欢迎提出宝贵意见和建议。谢谢。。。
    ---------------------
    作者:ching126
    来源:CSDN
    原文:https://blog.csdn.net/chenhongwu666/article/details/40594365
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    elasticsearch系列六:聚合分析(聚合分析简介、指标聚合、桶聚合)
    elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)
    elasticsearch系列四:搜索详解(搜索API、Query DSL)
    elasticsearch系列三:索引详解(分词器、文档管理、路由详解(集群))
    elasticsearch系列二:索引详解(快速入门、索引管理、映射详解、索引别名)
    elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)
    Solr系列六:solr搜索详解优化查询结果(分面搜索、搜索结果高亮、查询建议、折叠展开结果、结果分组、其他搜索特性介绍)
    Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)
    Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)
    Android IOS WebRTC 音视频开发总结(六六)-- 三个角度分析美女视频直播这个行业
  • 原文地址:https://www.cnblogs.com/skyay/p/10264401.html
Copyright © 2011-2022 走看看