c#使用AForge库调用usb摄像头进行拍照

最近由于老项目中使用的AForge.net库调用摄像头拍照,使用起来会出现卡慢的问题。于是决定对这块进行一下优化。
首先我们需要在项目中引入如图所示的几个库
调用摄像头拍照需要的库
接下来我们需要在工具箱中添加AForge.Controls对应的控件。
c#使用AForge库调用usb摄像头进行拍照_第1张图片
一定要使用VideoSourcePlayer控件来播放视频源,这样才能避免长时间使用摄像头导致的卡慢问题.我一开始使用的是抓取视频源的帧数据绘制到一个picturebox上,这样做会导致内存泄漏致使程序卡慢甚至崩溃的问题。

FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); //获取视频源输入设备列表
VideoCaptureDevice videoSource = new VideoCaptureDevice(videoDevices[index].MonikerString); //初始化视频源输入设备
videoSource.VideoResolution = videoSource.VideoCapabilities[0]; //设置视频源的分辨率
videoSource.SetCameraProperty(CameraControlProperty.Exposure, 0, CameraControlFlags.Auto); //设置摄像头为自动曝光
videoSourcePlayer.VideoSource = videoSource; //为播放视频控件设置视频源
videoSourcePlayer.Start(); //开始接收视频数据
videoSourcePlayer.GetCurrentVideoFrame(); //获取视频源的当前帧数据
videoSourcePlayer.SignalToStop(); //发送关闭摄像头信号
videoSourcePlayer.WaitForStop();等待摄像头关闭

使用AForge.net可以处理笔记本自带的摄像头,和外接的usb摄像头。目前还没有遇到不能处理的usb摄像头。以上代码的关键是要使用AForge.net自带的播放控件VideoSourcePlayer进行帧数据的接收和截取。

你可能感兴趣的:(c#)