C#标准库本身不带有能调用电脑摄像头的库,如果利用windows自身的API来实现的话,着实有些麻烦。Aforge这个第三方库能很好的实现调用、处理的功能。

PS:文末给大家分享了完整的项目源码,各位最好先下载下来,对照着来看

1、先看一下效果

2、Aforge介绍

AForge.NET是一个专门为开发者和研究者基于C#框架设计的,这个框架提供了不同的类库和关于类库的资源,还有很多应用程序例子,包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,机器人等领域。

3、我使用的开发环境

操作系统: win10专业版

.Net framework: 3.5

IDE: vs 2019 WinForm


正式开始啦******************

1、新建winform项目

项目名我命名为 Camera_001,你们随意

2、安装AForge

1)右击项目名:

2)打开“管理NuGet程序包”:

3)按下面的操作进行安装:

同理,依次安装下面的几个包:

稍微注意一下:这几个包的作者都是AForge.Net

3、检查

安装好包之后,会在工具箱发现自动多了一些控件。vs不愧为宇宙最强IDE!

# 4、开始编程!

1)首先,

在新添加进来的控件中找到VideoSourcePlayer控件,拖进窗体中,调整好尺寸。命名我就按默认的吧(videoSourcePlayer1),你们随意!

这个控件的作用是:显示从摄像头中获取的图像

#### 2)添加下面的控件

在comboBox控件中添加两个项:

​ 摄像头1

​ 摄像头2

两个button控件。把它们的Enabled属性都设置为false,因为一开始没有选择摄像头,不能拍摄更不能保存。

pictureBox用于显示拍摄得到的图片

3)添加using要使用的库

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

4)声明下面的变量,先不赋值。

FilterInfoCollection videoDevices;//摄像头设备集合
VideoCaptureDevice videoSource;//捕获设备源
Bitmap img;//处理图片

5)在窗体的Load事件中添加下面的代码

viderDevices变量用于保存电脑中所有的摄像设备

  private void Form1_Load(object sender, EventArgs e){//先检测电脑所有的摄像头videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);MessageBox.Show("检测到了" + videoDevices.Count.ToString() + "个摄像头!");}

6)选择摄像头

双击comboBox控件,在生成的事件中写下面的代码

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){if (comboBox1.Text == "摄像头1" && videoDevices.Count > 0)videoSource = new VideoCaptureDevice(videoDevices[0].MonikerString);else if (comboBox1.Text == "摄像头2" && videoDevices.Count > 1)videoSource = new VideoCaptureDevice(videoDevices[1].MonikerString);else{MessageBox.Show("选择的摄像头不存在!!!");return;}videoSourcePlayer1.VideoSource = videoSource;videoSourcePlayer1.Start();button1.Enabled = true;//开启“拍摄功能”}

这个时候可以运行一下噢!!!!运行看一下效果吧。

7)关闭并释放摄像头

到这,会有两个问题:

  1. 关闭窗口时程序不会停止。这是因为你选择的摄像头并未关闭释放
  2. 切换到一个不存在的摄像头时,之前的摄像头依然在使用。

所以,在代码的下面编写一个方法(函数):

     // 关闭并释放摄像头public void ShutCamera(){if (videoSourcePlayer1.VideoSource != null){videoSourcePlayer1.SignalToStop();videoSourcePlayer1.WaitForStop();videoSourcePlayer1.VideoSource = null;}}

在窗体的Formclosing事件中调用一次,在comboBox的事件中调用一次


8)开始拍摄

双击button1拍摄按钮,加入下面的代码:

        private void button1_Click(object sender, EventArgs e){img = videoSourcePlayer1.GetCurrentVideoFrame();//拍摄pictureBox1.Image = img;button2.Enabled = true;//开启“保存”功能}

运行一下,发现拍摄之后,图片显示的是什么鬼!

不要慌,问题不大。把pictureBox控件的SizeMode属性设置为Zoom,很重要!!!再运行一下看看。

9)保存

双击button2保存按钮,加入下面的代码:

//"保存"按钮click事件private void button2_Click(object sender, EventArgs e){try{//以当前时间为文件名,保存为jpg格式//图片路径在程序bin目录下的Debug下TimeSpan tss = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);long a = Convert.ToInt64(tss.TotalMilliseconds) / 1000;  //以秒为单位img.Save(string.Format("{0}.jpg", a.ToString()));MessageBox.Show("保存成功!");button2.Enabled = false;}catch (Exception ex){MessageBox.Show(ex.Message);}}

好了,有问题可以留言哈!!!

大功告成!!!

其实远没有结束,AForge是一个很强大的库,能实现很多功能。比如选择不同的分辨率,实现录像功能等等等等。剩下的就交给各位慢慢探索吧!!!

[附:完整的项目源码下载]

Github地址

链接:https://pan.baidu.com/s/1BqrJ_hTzG7SgGZOw7P-6aw
提取码:hek6
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V3的分享

C#通过Aforge调用电脑摄像头(附代码)相关推荐

  1. Get了!用Python制作数据预测集成工具 | 附代码

    作者 | 李秋键 责编 | 晋兆雨 大数据预测是大数据最核心的应用,是它将传统意义的预测拓展到"现测".大数据预测的优势体现在,它把一个非常困难的预测问题,转化为一个相对简单的描述 ...

  2. java中自造类是什么意思_Java建造者模式是什么?如何实现?(附代码)

    本篇文章给大家带来的内容是关于Java建造者模式是什么?如何实现?(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 建造者模式 一.什么是建筑者模式? 建造者模式(Build ...

  3. 独家 | 手把手教TensorFlow(附代码)

    上一期我们发布了"一文读懂TensorFlow(附代码.学习资料)",带领大家对TensorFlow进行了全面了解,并分享了入门所需的网站.图书.视频等资料,本期文章就来带你一步步 ...

  4. 彻底理解cookie,session,localStorage(附代码)

    2019独角兽企业重金招聘Python工程师标准>>> 1. cookie 1.1 什么是cookie cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某 ...

  5. 使用英伟达NeMo让你的文字会说话,零基础即可实现自然语音生成任务 | 附代码...

    语音合成技术可以将文字信息转换成标准流畅的语音且进行朗读,在公共服务.智慧交通.泛娱乐.智能硬件等领域具有广泛应用. 在第3期英伟达x量子位NLP公开课上,英伟达开发者社区经理分享了[使用NeMo让你 ...

  6. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  7. 简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码)

     简单有趣的 NLP 教程:手把手教你用 PyTorch 辨别自然语言(附代码) 雷锋网(公众号:雷锋网)按:本文作者甄冉冉,原载于作者个人博客,雷锋网已获授权. 最近在学pyTorch的实际应用 ...

  8. linux 进程间通信 dbus-glib【实例】详解四(上) C库 dbus-glib 使用(附代码)(编写接口描述文件.xml,dbus-binding-tool工具生成绑定文件)(列集散集函数)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  9. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  10. linux 进程间通信 dbus-glib【实例】详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

最新文章

  1. ASI和AFN的区别
  2. aos make 配置环境
  3. window服务器cpu过高的排查_线上服务器发生CPU占用率过高应该如何排查并定位问题?...
  4. 老罗的情怀“被”与廉价划等号 锤子“被”选错了对手
  5. 内核怎么帮程序建立连接的
  6. 4步搞定MySQL安装部署(附MySQL一键式部署脚本)
  7. Asp.net的生命周期之应用程序生命周期
  8. chromedriver放在哪个目录下_python | Linux各目录及每个目录的详细介绍 - MR_黄Python之路...
  9. 脏数据-数据量纲差异
  10. Windows下SVN已检出项目自动更新
  11. 川大网页多媒体设计【李天翼班】资料整理
  12. 猜一猜,我国第一次大规模应用二维码是什么时候?
  13. 中国NPP净初级生产力数据/植被覆盖空间分布数据分享(2000-2021)
  14. Python 网络爬虫微实战 (爬虫爬取贴吧消息词云显示) 超详解
  15. 《SysML精粹》学习记录--第十一章
  16. 一键批量替换文本工具
  17. mssql 计划怎每隔n秒_4个步骤,教你定制超科学的跑步计划
  18. java utill scanner_(转)java.util.Scanner应用详解
  19. ElasticSearch语法整理-DSL语言高级查询
  20. 如何添加51la代码及隐藏统计图标

热门文章

  1. 怎么撤销工作表保护,没有密码?
  2. 易语言5.9免加密狗版
  3. 卸载网易邮箱大师邮件从服务器删除,如何卸载网易邮箱大师 网易邮箱大师卸载教程...
  4. windows server 2003安装pc套件ovi套件全过程?
  5. python编写的bt爬虫实践
  6. 代码整洁之道-读书笔记
  7. Setup Factory打包教程整合
  8. 产品读书《定位:有史以来对美国营销影响最大的观念》
  9. UE4学习-初识虚幻引擎(下载、安装、重定向问题、安装引擎、启动)
  10. 印象笔记如何分享链接_【记录】试用印象笔记最新的笔记分享出页面的功能