Mariya 0 Жалоба Опубликовано September 25, 2020 Как можно сделать усреднение n-кадров видеопотока (EmguCV)? Есть простая идея. Как правильно суммировать? int n = 10; Mat img_sum = new Mat(); Mat img_m = new Mat(); for (int i = 1; i <= 10; ++i) { capture.SetCaptureProperty(Emgu.CV.CvEnum.CapProp.PosFrames, i); capture.Read(m); //нужно подсчитать сумму } img_m = img_sum / n; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 26, 2020 Классически делается при помощи взвешенной суммы addWeigted с коэффициентом 1/n , где n - количество усредняемых кадров. Можно использовать как усреднение в видеопотоке. Описание тут: http://www.emgu.com/wiki/files/3.1.0/document/html/180ae243-ff3c-f59c-7e3a-a8e474583e8e.htm Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Mariya 0 Жалоба Опубликовано September 27, 2020 Спасибо. Не очень понятен метод AddWeighted. Может быть, есть примеры суммирования n-изображений? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 27, 2020 Я на шарпе не пишу, на C++ это было бы так, конвертировать матрицы в тип float при помощи convertTo, затем просто суммировать S=S+m и в конце разделить на количество кадров S=S/n. Или применить addWeighted beta = ( 1.0 - alpha ); addWeighted( src1, alpha, src2, beta, 0.0, dst); alpha в вашем случае 1/n src2=dst , src1 - новое изображение с камеры. dst - буфер где будет вычисляться среднее. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Mariya 0 Жалоба Опубликовано September 29, 2020 Спасибо за советы. Получилось! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах