Получить снимок с разным разрешением с 5 камер одновременно без изменения разрешения живого видео? - PullRequest
0 голосов
/ 08 мая 2018

Я использовал AForge.NET для какой-то задачи по обработке изображений. У меня есть 5 веб-камера и я могу видеть вживую все эти камеры на winfrom. максимальное разрешение видео этой камеры HD. Я показываю в прямом эфире эти камеры с половиной разрешения HD, потому что достигнута максимальная пропускная способность, и все эти камеры не могут показывать в прямом эфире вместе.

Моя задача - получить снимок от всех этих камер одновременно с разрешением HD. Есть ли способ, которым я могу изменить разрешение только для того, чтобы сделать снимок, не останавливая разрешение камеры для живого видео?

Следующий код на кнопке «Снимок» не работает:

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

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

1 Ответ

0 голосов
/ 08 мая 2018

Прежде всего, я думаю, что лучше использовать 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, если пользователь хочет сделать снимок

...