文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C#怎么调用USB摄像头

2023-06-29 17:22

关注

这篇文章主要介绍“C#怎么调用USB摄像头”,在日常操作中,相信很多人在C#怎么调用USB摄像头问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么调用USB摄像头”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、AForge安装

右击工程,在管理NuGet程序包中搜索Aforge类库,选择安装,如下图所示

C#怎么调用USB摄像头

C#怎么调用USB摄像头

2、进行USB摄像头类封装

a、初始化,初始化时要注意,加载的设备分辨率需要人工配置,如果配置分辨率不存在需要从默认的分辨率中选择

videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);  if (videoDevices.Count > 0 && videoDevices.Count >= CameraIndex)       {         FilterInfo info = videoDevices[videoDevices.Count - 1];         videoSource = new VideoCaptureDevice(info.MonikerString);          if (videoSource.VideoCapabilities.Length > 0)            {             VideoCapabilities tmp = videoSource.VideoCapabilities.               First(x => x.FrameSize.Width == LocalSize.Width &&                       x.FrameSize.Height == LocalSize.Height);                   if (tmp != null)                   {                    videoSource.SnapshotResolution = tmp;                    videoSource.VideoResolution = tmp;                   }                 else                  {                    int index = (videoSource.VideoCapabilities.Length + 1) / 2;                    tmp = videoSource.VideoCapabilities[index];                    }                  videoSourcePlayer.VideoSource = videoSource;                  videoSourcePlayer.Start();                  videoSource.NewFrame += new NewFrameEventHandler(Video_NewFrame);                    }                }            }      catch (Exception ex)       {        LogHelper.Debug(ex);}

b、绑定回调方法,此方法在摄像头成功预览之后会实时返回数据帧,封装时可以传入PictureBox,把回调旋转后的图片显示在此控件上

private void Video_NewFrame(object sender, NewFrameEventArgs eventArgs)        {            try            {                Bitmap video = (Bitmap)eventArgs.Frame.Clone();                BmpRotate(video);                if (UsbVideo != null)                    UsbVideo.Image = video;            }            catch (Exception ex)            {                LogHelper.Debug(ex);            }        }         /// <summary>        /// 图像旋转        /// </summary>        /// <param name="_bmp"></param>        private void BmpRotate(Bitmap _bmp)        {            try            {                if (CameraRotate == "0")                {                }                else if (CameraRotate == "90")                {                    _bmp.RotateFlip(RotateFlipType.Rotate90FlipNone);                }                else if (CameraRotate == "180")                {                    _bmp.RotateFlip(RotateFlipType.Rotate180FlipNone);                }                else if (CameraRotate == "270")                {                    _bmp.RotateFlip(RotateFlipType.Rotate270FlipNone);                }            }            catch (Exception ex)            {                LogHelper.Debug(ex);            }}

c、抓图事件,手动抓图事件,通过调用GetCurrentVideoFrame()方法获取Bitmap图片

public Bitmap GetCurrentVideoFrame()      {            Bitmap bmp = null;            try            {                bmp = videoSourcePlayer.GetCurrentVideoFrame();                BmpRotate(bmp);            }            catch (Exception ex)            {                LogHelper.Debug(ex);            }            return bmp;        }

d、摄像头重连,此类库中videoSourcePlayer有个属性IsRunning可以判断是否USB摄像头预览中,可以对设备进行重连

private FilterInfoCollection videoDevices = null; //摄像头设备public VideoCaptureDevice videoSource = null; //视频的来源选择private VideoSourcePlayer videoSourcePlayer = new VideoSourcePlayer();public Bitmap img = null;public int CameraIndex = 1;        /// <summary>        /// 默认分辨率        /// </summary>        public Size LocalSize = new Size(640, 480);        bool isHave = false;        public string CameraRotate = "0";        private System.Windows.Forms.PictureBox UsbVideo = null;        public void ReConnect()        {            try            {                if (!videoSourcePlayer.IsRunning)                {                   videoSource.Stop();                   videoSource.Start();                }            }            catch (Exception)            {     }}

到此,关于“C#怎么调用USB摄像头”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯