c# 利用AForge.NET组件操作摄像头

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

根据网上的方法,运行程序摄像头出来了,但是怎么截图呢?找到一个显示图片方法如下

[csharp] view plaincopyprint?

  1. private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
  2. {
  3. Bitmap img = (Bitmap)eventArgs.Frame.Clone();
  4. //do processing here
  5. pictureBox1.Image = img;
  6. }

开始参考这句代码写了:

[csharp] view plaincopyprint?

  1. private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
  2. {
  3. Bitmap img = (Bitmap)eventArgs.Frame.Clone();
  4. string imgPath = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
  5. img.Save(imgPath);
  6. }

但是点击截图程序就自动不停截了大量的图片,最后导致程序出问题。想了一个笨方法,可以只截一次图:

[csharp] view plaincopyprint?

  1. private int flag = 1;
  2. /// <summary>
  3. /// 截图
  4. /// </summary>
  5. private void toolStripButton3_Click(object sender, EventArgs e)
  6. {
  7. flag = 0;
  8. videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
  9. }
  10. private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
  11. {
  12. Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
  13. if (flag == 0)
  14. {
  15. string img = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
  16. bitmap.Save(img);
  17. flag = 1;
  18. }
  19. }

完整的程序代码如下:

[csharp] view plaincopyprint?

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Imaging;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10. using AForge;
  11. using AForge.Video;
  12. using AForge.Video.DirectShow;
  13. using AForge.Imaging;
  14. using AForge.Imaging.Filters;
  15. namespace Camera
  16. {
  17. public partial class Form1 : Form
  18. {
  19. private FilterInfoCollection videoDevices;
  20. private VideoCaptureDevice videoSource;
  21. private int flag = 1;
  22. private string dirc = System.AppDomain.CurrentDomain.BaseDirectory + "Images"; //截图保存的目录
  23. public Form1()
  24. {
  25. InitializeComponent();
  26. }
  27. private void Form1_Load(object sender, EventArgs e)
  28. {
  29. if (!Directory.Exists(dirc))
  30. Directory.CreateDirectory(dirc);
  31. try
  32. {
  33. // 枚举所有视频输入设备
  34. videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
  35. if (videoDevices.Count == 0)
  36. throw new ApplicationException();
  37. foreach (FilterInfo device in videoDevices)
  38. {
  39. tscbxCameras.Items.Add(device.Name);
  40. }
  41. tscbxCameras.SelectedIndex = 0;
  42. }
  43. catch (ApplicationException)
  44. {
  45. tscbxCameras.Items.Add("No local capture devices");
  46. videoDevices = null;
  47. }
  48. }
  49. private void toolStripButton1_Click(object sender, EventArgs e)
  50. {
  51. CameraConn();
  52. }
  53. /// <summary>
  54. /// 连接开启摄像头
  55. /// </summary>
  56. private void CameraConn()
  57. {
  58. videoSource = new VideoCaptureDevice(videoDevices[tscbxCameras.SelectedIndex].MonikerString);
  59. videoSource.DesiredFrameSize = new Size(500, 300);
  60. videoSource.DesiredFrameRate = 1;
  61. videPlayer.VideoSource = videoSource;
  62. videPlayer.Start();
  63. }
  64. /// <summary>
  65. /// 关闭摄像头
  66. /// </summary>
  67. private void toolStripButton2_Click(object sender, EventArgs e)
  68. {
  69. videPlayer.SignalToStop();
  70. videPlayer.WaitForStop();
  71. }
  72. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  73. {
  74. toolStripButton2_Click(null, null);
  75. }
  76. /// <summary>
  77. /// 截图
  78. /// </summary>
  79. private void toolStripButton3_Click(object sender, EventArgs e)
  80. {
  81. flag = 0;
  82. videoSource.NewFrame += new NewFrameEventHandler(video_NewFrame);
  83. }
  84. private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
  85. {
  86. Bitmap bitmap = (Bitmap)eventArgs.Frame.Clone();
  87. if (flag == 0)
  88. {
  89. string img = dirc + "/" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".jpg";
  90. bitmap.Save(img);
  91. flag = 1;
  92. }
  93. }
  94. }
  95. }

界面效果如下:

时间: 2024-10-08 01:51:34

c# 利用AForge.NET组件操作摄像头的相关文章

C# 调用AForge类库操作摄像头

如有雷同,不胜荣幸,若转载,请注明 最近做项目需要操作摄像头,在网上百度了很多资料,很多都是C#调用window API 发送SendMessage,实现操作摄像头,但是C#调用window API的时候因为驱动的问题,总是弹出视频选择对话框,让人很是无语,看到大牛们有的截获到了window消息,然后模拟点击确定按钮,这是在是不敢恭维啊,还有的大牛根据API原型重写了,至于我是一只IT小小鸟了,然后在继续百度,找到了一个AForge强大的C#类库,最后终于搞定了,接下来将我拙劣的代码部分贴出来,

c# 利用AForge和百度AI开发实时人脸识别

baiduAIFaceIdentify项目是C#语言,集成百度AI的SDK利用AForge开发的实时人脸识别的小demo,里边包含了人脸检测识别,人脸注册,人脸登录等功能 人脸实时检测识别功能 思路是利用AForge打开摄像头,通过摄像头获取到的图像显示在winform窗体中AForge的控件中,利用AForge控件中的NewFrame事件获取要显示的每一帧的图像,获取图像传输到百度AI平台进行人脸检测,并且将检测结果反馈到界面显示的图像中.在这个过程中有两个问题,获取图像上传到百度AI平台进行

python opencv linux下合作操作摄像头

设想: 之前使用C#控制摄像头的,现在厌烦了windows,决定转移到linux下玩耍.感觉能够python语言特有的好入手,正好替代C#,选择了deepin2014.1作为试验品.现在的设想是第一步实现在自己电脑上对视频的采集,第二步实现视频传输.慢慢来吧.百度说python想操作摄像头,VideoCapture是windows特有的,linux要用opencv才行. 下载: 百度下载了最新的opencv,2.4.9版本,正好和deepin2014.1自带的python2.7般配,不冲突.且发

实验2014051901:opencv操作摄像头

实验1 实验目的:使用opencv操作摄像头拍摄一张图片 函数: 1 CvCapture* cvCreateCameraCapture( int index ); 2 IplImage* cvQueryFrame( CvCapture* capture ); 实验代码: 1 #include"highgui.h" 2 #include"cv.h" 3 int main(){ 4 cvNamedWindow("w",0); 5 IplImage*

java调用com组件操作word使用总结(jacob)

ava调用com组件操作word使用总结(jacob) 简单描述 在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作; 一.准备工作 先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的.这是一个开始于 1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献. Jacob下载地址: http://s

使用easyui-window,ID重复,导致组件操作失败

easyui-window组件构成的窗口,若inline属性为false(默认为false),则窗口归属于最外层的document,即使关闭窗口,该窗口也未消失而是隐藏. 所以,若该窗口中元素与其他页面中相同,则会导致其他页面中的组件操作失败,因为$("#id")会取到"已关闭的窗口"中的组件. 给组件命令时尽量避免使用相同ID,可在取名前使用全局搜索看一下是否有其他文件中有相同名字.

C# 利用AForge.NET开源类库实现 图像素描效果

引入DLL: using AForge.Imaging; using AForge.Imaging.Filters; //using AForge.Video.DirectShow;可以使用摄像头图像 代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using S

利用AForge.NET 调用电脑摄像头进行拍照

当然了,你需要去官网下载类库,http://www.aforgenet.com/ 调用本机摄像头常用的组件: AForge AForge.Controls AForge.Imaging AForge.Video AForge.Video.DirectShow 图片展示方面,你可以使用PictureBox,也可以使用类库提供的控件videPlayer. 因为我这个还集成了 条码识别.电子秤称重,所以代码有点多,多多见谅. using System; using System.Collections

利用AForge+Tesseract制作视频OCR程序

先上界面: 实现功能及流程: 1:从摄像头获取图像,框选要识别的区域 2:对选区进行图像处理,方便识别 3:识别文字 4:获取芯片上的内容(使用客户提供的芯片解码程序) 5:比较两个内容是否一致 6:写入数据库(带图片) 7:对历史数据进行查阅.导出Word(导出时带图片) 此版本将4~7功能去除了 获取图像: 使用AForge组件(参考项目:http://download.csdn.net/detail/jrlxsy/6927833),为了绘选区,将图像通过PictureBox显示出来,事件: