В общем задача такая, что с камеры идёт видеопоток, я обрабатываю его через некоторые методы opencv, но мне нужно хранить небольшую часть видео в памяти 5-10 секунд. Возможно я плохо искал, но ответы, которые я находил что в opencv нет такой возможности.
Поэтому я хотел узнать, нормально ли просто хранить несколько сотен кадров в памяти и при необходимости их использовать или есть более простое решение?
храни сам видеопоток, при необходимости повторно обработаешь
как частный случай - сжимай обработанный поток каким-либо кодеком (подбери максимально шустрый) если тебе подходит потеря качества.
можно хранить распакованные кадры, но оперативной памяти для этого потребуется очень много - гигабайтами, в зависимости от разрешения
храни сам видеопоток, при необходимости повторно обработаешь
имеете ввиду на диске хранить?
Для этого потребуется очень много - гигабайтами, в зависимости от разрешения
Я тут не уточнил, камера одна и видео которое хранится в оперативной памяти будет всё время длиной в 5-10 секунд, думаю что там не должно гигабайты занимать(если даже full hd писать с 25 кадрами)
Чтобы хранить несжатый поток FullHDx25x16bit (бывает 32bit, реже 8bit кстати битность цвета может не быть кратной байту, например есть 12bit кодирование, вопрос какая кодировка цвета у вашей камеры) нужно 2*1920*1080*25=103680000 байт/сек это ~100мб, в принципе не много, 10 секунд это один гигабайт
храни сам видеопоток, при необходимости повторно обработаешь
Если не сложно можете сказать в какую сторону примерно копать. А искал примерно по таким запросам "gstreamer opencv save videostream to memory", но только ничего нашел.
gstreamer на сколько я знаю от тебя скрывает изначальный сырой поток
но ты же запрашиваешь по кадрам к примеру из камеры, тебе дают буфер в формате камеры например YUV, либо ты его в RGBA преобразуешь, вот это трезультирующий буфер и есть твой кадр, в распакованном виде, скопируй его в свой массивчик и держи до востребования