我使用AForge.NET进行一些图像处理任务。我有5个摄像头,可以在winfrom上看到所有这些摄像头的直播。这些相机的最大视频分辨率是高清。我确实以高清分辨率的一半显示这些相机的直播,因为达到了最大带宽,所有这些相机都无法在现场一起显示。
我的任务是通过高清分辨率从所有这些相机同时获取快照。是否有任何技术可以改变分辨率,只是为了拍摄快照而不需要为实时视频保留相机的分辨率?
“快照”按钮上的以下代码不起作用:
videoSource1.DesiredFrameSize = new Size(4096, 2160);
videoSourcePlayer1.VideoSource = videoSource1;
img = videoSourcePlayer1.GetCurrentVideoFrame();
dest = "d:\\file1.png";
img.Save(dest);
答案 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