Перейти к содержимому
Compvision.ru
ultimatet41

По кадровая перезапись видео

Recommended Posts

Здравствуйте, возник следующий вопрос возможно ли с помощью opencv реализовать циклическую запись видео т.е. при достижении определённой длины ролика его нужно начать перезаписывать заменяя кадр за кадром, а не просто затирая?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Думаю, что нет.

Да и вообще, представь себе этот процесс. Если видео сжато каким-нибудь кодеком, то каждый кадр будет отличаться по размеру от предыдущего и покадровая перезапись приведёт с необходимости сдвига на диске всего ролика (!) на каждом кадре (!). Не уверен, что тебе нужно такое счастье.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

можно это реализовать в оперативной памяти с массивом картинок, если вам хватит памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А для чего это, если не секрет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

не секрет, хотел написать автомобильный видео регистратор для nokia n900, но теперь придется реализовывать данную функцию через два файла это конечно немного не то, но получится похоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему-то тоже подумал сразу про авторегистратор читая эту тему. Самое оптимально с двумя файлами. Менее ресурсоёмко и более надёжно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Решил попробовать записывать видео с вебки в файл и к сожалению обнаружил, что работает это все не очень хорошо.

Версия библиотеки 1.1, среда разработки 2008.


double fps = 15;

CvVideoWriter *writer = cvCreateVideoWriter("test.avi",CV_FOURCC('X','V','I','D'), fps,size,1); 


for(;

{

   IplImage* imageObject1;

   imageObject1 = cvCreateImage(cvSize(VI.getWidth(device1),VI.getHeight(device1)), IPL_DEPTH_8U, 3);

   VI.getPixels(device1, (unsigned char *)imageObject1->imageData, false, true);

   cvWriteFrame(writer, imageObject1);

   char c = cvWaitKey(100);

   if (c==27)

   {

   }

   cvReleaseImage(&imageObject1);

}

[/code]

При таком коде, записанный кусок видео воспроизводится в 2 раза быстрее чем должен. cvWaitKey(100) double fps = 15 на скорость воспроизведения не влияют.

Пока переходить на версию 2.2 пока не хочу.

Так же вопрос почему из кодеков:

CV_FOURCC('X','V','I','D') - кодек XviD

CV_FOURCC('P','I','M','1') = MPEG-1

CV_FOURCC('M','J','P','G') = motion-jpeg (does not work well)

CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2

CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3

CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4

CV_FOURCC('U', '2', '6', '3') = H263

CV_FOURCC('I', '2', '6', '3') = H263I

CV_FOURCC('F', 'L', 'V', '1') = FLV1

работает только первый. Когда ставлю -1, то в окне выбора кодеков многие из них есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Согласна. OpenCV 2.0, Python 2.6. Та же проблема. Есть выход?

Еще вопрос: возможно ли писать ч/б видео? (из одноканальных кадров)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Согласна. OpenCV 2.0, Python 2.6. Та же проблема. Есть выход?

Проблема с fps? Ну так надо выставить реальное значение, захватываемое камерой.

Еще вопрос: возможно ли писать ч/б видео? (из одноканальных кадров)

Если камера поддерживает, то можно. Я таких камер пока не встречал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Если камера поддерживает, то можно. Я таких камер пока не встречал.

В смысле захватив кадр перевести его в 1-канальн ч/б, записать cvWriteFrame

Проблема с fps? Ну так надо выставить реальное значение, захватываемое камерой.

С родной частотой (30 fps) выходит еще быстрее :(

Ура! Победила ч/б :) Оказывается, в VideoWritere есть аргумент is_color, который я упорно игнорировала...

<хорошо иногда быть идиотом...>

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Барахлит кодек FLV: записывает нечитаемое видео.

(все тот же opencv2.0+python2.6+winXP)

Очень нужно записать *.flv (или найти кодек H264):(

Как быть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже это известный баг, вот:

https://code.ros.org/trac/opencv/ticket/1576

Можно попытаться использовать консольный конвертер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×