C# 在不更改实时视频分辨率的情况下,从5个摄像头同时获取不同分辨率的快照?

C# 在不更改实时视频分辨率的情况下,从5个摄像头同时获取不同分辨率的快照?,c#,image,image-processing,aforge,C#,Image,Image Processing,Aforge,我使用了一个forge.NET来完成一些图像处理任务。我有5个摄像头,可以在winfrom上看到所有这些摄像头的实况。这些相机的最大视频分辨率为高清。我用高清分辨率的一半实时显示这些相机,因为已经达到了最大带宽,所有这些相机无法同时进行实时显示 我的任务是用高清分辨率同时从所有这些相机中获取快照。有没有什么技术可以让我仅仅为了拍摄快照而改变分辨率,而不必让摄像机的分辨率停留在实时视频上 快照按钮上的以下代码不起作用: videoSource1.DesiredFrameSize =

我使用了一个forge.NET来完成一些图像处理任务。我有5个摄像头,可以在winfrom上看到所有这些摄像头的实况。这些相机的最大视频分辨率为高清。我用高清分辨率的一半实时显示这些相机,因为已经达到了最大带宽,所有这些相机无法同时进行实时显示

我的任务是用高清分辨率同时从所有这些相机中获取快照。有没有什么技术可以让我仅仅为了拍摄快照而改变分辨率,而不必让摄像机的分辨率停留在实时视频上

快照按钮上的以下代码不起作用:

        videoSource1.DesiredFrameSize = new Size(4096, 2160);
        videoSourcePlayer1.VideoSource = videoSource1;

        img = videoSourcePlayer1.GetCurrentVideoFrame();
        dest = "d:\\file1.png";
        img.Save(dest);

首先,我认为最好使用Accord.Net而不是forge.Net

其次,您应该使用
VideoCaptureDevice
从网络摄像头捕获视频。代码如下

videoCaptureDevice = new VideoCaptureDevice(moniker);
videoCaptureDevice.VideoResolution = videoCaptureDevice.VideoCapabilities.OrderByDescending(vc => vc.FrameSize.Width).First();
videoCaptureDevice.NewFrame += VideoCaptureDevice_NewFrame;

videoCaptureDevice.Start();
VideoCaptureDevice\u NewFrame
中,您可以使用如下代码在面板上绘制

lastFrame?.Dispose();
lastFrame = frame.Clone(new Rectangle(0, 0, frame.Width, frame.Height), frame.PixelFormat);

var resizedFrame = new ResizeNearestNeighbor(width, height).Apply(lastFrame);
panelGraphics.DrawImage(resizedFrame, 0, 0);
resizedFrame.Dispose();

如果用户想要快照,您可以使用lastFrame

,那么为什么不直接调整图像的大小呢?我想在HesamFaridmehrI拍摄一幅高清图像,意思是用最大分辨率初始化视频源,然后在观看时调整图像的大小,然后用最大分辨率绘制图像。我们无法为一个系统提供5台实时摄像机。具体制度有限@HesamFaridmehrI没有告诉你最高分辨率的画图,只是从网络摄像头抓取最高分辨率。我们有5个300*600分辨率的摄像头和实时输出。好啊我定义了一个按钮,点击时可以截图。此按钮中定义了哪个部分?在按钮单击事件中,您将使用lastFrame对象并将其保存在启动相机的位置?我的意思是以最高分辨率直播是吗?videocapturedevice\u newframe在哪里?这是错误。videoSource1=新的VideoCaptureDevice(videoDevices[0]。MonitorString);videoSource1.DesiredFrameRate=30;videoSourcePlayer1.VideoSource=videoSource1;