1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C# 调用USB摄像头

C# 调用USB摄像头

时间:2020-10-19 10:33:17

相关推荐

C# 调用USB摄像头

目录

C#调用USB摄像头使用AForge类库进行开发

1、AForge安装

2、下载完毕后进行USB摄像头类封装

C#调用USB摄像头使用AForge类库进行开发

1、AForge安装

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

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){}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。