在不更改实时视频分辨率的情况下,同时从5台摄像机获取不同分辨率

时间:2018-05-08 13:26:46

标签: c# image image-processing aforge

我使用AForge.NET进行一些图像处理任务。我有5个摄像头,可以在winfrom上看到所有这些摄像头的直播。这些相机的最大视频分辨率是高清。我确实以高清分辨率的一半显示这些相机的直播,因为达到了最大带宽,所有这些相机都无法在现场一起显示。

我的任务是通过高清分辨率从所有这些相机同时获取快照。是否有任何技术可以改变分辨率,只是为了拍摄快照而不需要为实时视频保留相机的分辨率?

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

videoCaptureDevice.Start();

VideoCaptureDevice_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