接下来我将详细讲解“C#利用AForge实现摄像头信息采集”的完整攻略,包括以下几个部分。
简介
AForge.NET是一个开源的C#编写的开源计算机视觉库,能支持许多常见的图形和影像处理技术,如滤波、阈值、形态学运算、边缘检测、特征检测、接口的处理等等。
本攻略将详细介绍利用AForge.NET获取摄像头视频流,并将视频流进行处理的方法。
安装AForge.NET
在Visual Studio中,选择你的项目,右键->“管理NuGet程序包”,第一种方法是在筛选中搜索AForge并进行安装,或者选择“浏览”,在搜素框中搜索AForge并进行安装。
安装完成之后,在程序中引入如下命名空间:
using AForge.Video;
using AForge.Video.DirectShow;
这两个命名空间用于视频流的处理。
获取摄像头列表
利用AForge中的FilterInfoCollection和VideoCaptureDevice两个类,我们可以获取到计算机连入的所有摄像头列表,下面是代码:
FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);// 获取已连接到计算机的摄像头列表
VideoCaptureDevice videoCaptureDevice = new VideoCaptureDevice(videoDevices[0].MonikerString);// 根据选定的摄像头实例化VideoCaptureDevice
videoCaptureDevice.Start();// 打开摄像头
这段代码会获取到已连接到计算机的摄像头列表,并打开第一个摄像头,此处需要注意的是,如果计算机上没有可连接的摄像头,则会出现错误。
实时获取视频流
在上面的代码中,我们已经成功获取到了摄像头列表并打开了第一个摄像头,现在需要将摄像头的视频流实时获取。在AForge中,我们利用委托来控制获取摄像头帧的频率,代码如下:
videoCaptureDevice.NewFrame += new NewFrameEventHandler(VideoCaptureDevice_NewFrame);
void VideoCaptureDevice_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
...
}
NewFrameEventHandler
是AForge中的一个委托,它是一种用于指向函数的指针,指针在程序中非常常见。在委托中,我们将事件处理函数VideoCaptureDevice_NewFrame()
赋给NewFrameEventHandler()
,在videoCaptureDevice
捕捉到新的帧时,程序会调用这个委托。
在VideoCaptureDevice_NewFrame()
中,我们可以通过使用eventArgs.Frame
来获取捕捉的图像(Bitmap类型)。
图像处理
在获取到摄像头的视频流之后,我们可以进行一些图像处理,如缩小,设定曝光度,添加滤镜等等。这里仅以用Grayscale
方法将图像变为灰度图为例:
Bitmap frame = (Bitmap)eventArgs.Frame.Clone();
Grayscale grayscaleFilter = new Grayscale(0.2125, 0.7154, 0.0721);
Bitmap grayscaleImage = grayscaleFilter.Apply(frame);
在这个代码中,我们利用Grayscale
滤镜将彩色图变为了灰度图。
示例1:将图像显示在控件中
AForge是一个非常强大的图像处理库,我们可以在Grayscale
方法的振幅上添加其他滤镜,自定义方法和库中已经准备好的滤镜。这里将为您介绍如何将图像显示在控件中。
首先,在需要显示图像的控件上双击,打开DoubleClicked()
事件。
接下来,在该事件中,我们要将处理后的图像作为控件的背景,通过以下代码实现:
Bitmap image = your_image;
Graphics graphics = control.CreateGraphics();
graphics.DrawImage(image, 0, 0, control.Width, control.Height);
上面的代码中,control
是指代你需要加载图片的控件,image
是待处理的图片。我们创建了一个名为Graphics
的对象,专门来处理图像,将处理后的图像画到控件中。
示例2:保存图片
在最后一个步骤中,我们介绍如何保存处理后的图像,代码如下:
grayscaleImage.Save(@"D:\test.bmp");
在这个代码中,我们将处理过后的灰度图保存在了D盘的test.bmp
文件中。
总结
在这篇攻略中,我们学习了使用AForge及C#编写程序来获取摄像头的视频流并进行一些简单的图像处理,您可以根据您的需求进行扩展和改变。这仅是撷取视频的一小部分,有关更多的内容请参阅AForge文档, 感谢您的阅读。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 利用AForge实现摄像头信息采集 - Python技术站