Вывод видео в OpenCV не сложнее, чем вывод одной картинки, только в данном случае потребуется использовать цикл для последовательного вывода кадров. Так же необходимо предусмотреть условия выхода из цикла, если кино нам надоест :)
Работа программы начинается с функции cvCreateFileCapture, которая предоставляет нам доступ к видео-файлу. Далее в бесконечном цикле мы последовательно получаем кадры видео один за другим с помощью функции cvQueryFrame, которая возвращает указатель на уже знакомую нам структуру картинки IplImage.
Показываем кадр в окошке, а затем при помощи функции cvWaitKey ждём 33 миллисекунды и затем цикл продолжается, если не нажата клавиша ESC.
33 выбрано не случайно — т.к. эта задержка даёт возможность просмотра 30 кадров в секунду.
#include <cv.h>
#include <highgui.h>
#include <stdlib.h>
#include <stdio.h>
IplImage* frame =0;
int main(int argc, char* argv[])
{
// имя файла задаётся первым параметром
char* filename = argc == 2 ? argv[1] : "test.avi";
printf("[i] file: %s\n", filename);
// окно для отображения картинки
cvNamedWindow("original",CV_WINDOW_AUTOSIZE);
// получаем информацию о видео-файле
CvCapture* capture = cvCreateFileCapture( filename );
while(1){
// получаем следующий кадр
frame = cvQueryFrame( capture );
if( !frame ) {
break;
}
// здесь можно вставить
// процедуру обработки
// показываем кадр
cvShowImage( "original", frame );
char c = cvWaitKey(33);
if (c == 27) { // если нажата ESC - выходим
break;
}
}
// освобождаем ресурсы
cvReleaseCapture( &capture );
// удаляем окно
cvDestroyWindow("original");
return 0;
}
Вот пример работы программы(кадр из фильма «7 кабинок»)
— получает и возвращает кадр с камеры или из файла. В качестве параметра получает указатель на структуру CvCapture. ! возвращаемое изображение не должно освобождаться или модифицироваться!
Я столкнулся с проблемой при выводе видео. Во время работы программы количество используемой ей ОЗУ постоянно нарастает до тех пор, пока она не переполнится. Надо что-то где-то очищать на каждом проходе цикла. Только вот не пойму что. Хотя возможно проблема кроется и не в выводе видео((
странно, что сами не догадались — у вас в цикле каждый раз создаётся (выделяется память) сразу под две картинки dst и edge. Т.о. нужно просто в конце цикла их освобождать (или лучше — выделять память только один раз — при первом проходе цикла).
Здравствуйте. Также столкнулся с некоторой проблемой. Ваш исходник прекрасно компилируется, но, при запуске исполняемого файла, вылазит ошибка и приложение падает. При запуске отладчика вылезает следующее:
Unhandled exception at 0x00905a4d in 03. Videofile.exe: 0xC0000005: Access violation.
Как с этим быть?
Использую Windows 7 / Visual studio 2010 / OpenCV 2.2.0
Было то же самое под дебагом, решилось подключением отладочных версий библиотек вместо релизных (opencv_core220d.lib вместо opencv_core220.lib и т.д.). Релизные библиотеки походу с ошибкой (которую вероятно уже пофиксили), попадались в интернете подобные треды.
Добрый день! Подскажите пожалуйста в чем может быть проблема… Собрал этот пример, а видео нет, только серый квадрат. Функция cvCreateFileCapture(filename) не возвращает указатель на capture… Заранее спасибо!
проверял, уже и через командную строку вбивал и напрямую… а как-то можно в opencv вывести ошибку, типа geterror или что-то такое, чтобы точно знать в чем проблема? А какие еще есть варианты? Использую OpenCv 1.0. Спасибо…
я для этого собираю отладочную версию библиотеки и просто трассирую вызов метода отладчиком.
Так же, рекомендую перейти на более свежую версию OpenCV ;)
извини за может быть тупой вопрос, а как трассировать в visual studio(к сожалению никогда такого не делал)… и попробую обновить opencv до 2.0. Спасибо…
поставил паузу после открытия видеофайла и увидел в консоли, что вывело ошибку:
warning: error opening file (C:\User\VP\ocv\opencv\src\highgui\cvcap_ffmpeg.cpp:452)
Непонятно что это за путь, где он ищет?
Я так понимаю, что это ошибка в файле cvcap_ffmpeg.cpp в строке 452. Т.е. получается, что сама ошибка в либе, при сборке(по ходу в windows 7 собирали)?
Добрый вечер! Нашел свой бок — это по поводу предыдущего поста. Но возникла другая проблема: при запуске — программа падает и выдает сообщение: «необработанное исключение и т.д. и т.п… Нарушение прав доступа при чтении 0хffffffffff»… Перед этим считывает 3 кадра… Помогите пожалуйста!!!
Вас не затруднит ответить на robocraft.ru/forum/viewtopic.php?f=7&t=102, почему при обращении к пикселям изображения, получаемого методом cvQueryFrame( capture ); возникает
Unhandled exception at 0x00411b05 in ImageAnalysis.exe: 0xC0000005: Access violation reading location 0x0000001c.
и
HIGHGUI ERROR: AVI: Could not seek to position 0.000?
Здравствуйте! Столкнулся с такой проблемой, при воспроизведении видео с помощью кода из данной статьи, видео показывает, но без звука. Почему такое может быть? подскажите пожалуйста.
Здравствуйте. Есть такая проблема. Данный пример компилируется, запускается, но программа тут же закрывается не воспроизводя видео. Пишет такую ошибку: warning: Error openning file <.../.../modules/highgiu/src/cap_ffmpeg_impl.hpp:526> Что за ошибка 526? Поиск в инете ни чего не дал.
Здравствуйте! Скомпилировал этот пример, но при запуске программа не показывает ничего, только выводит в консоль "[i] file: test.avi" и завершает работу. Повставлял в код printf'ов, чтобы понять, до куда до ходит программа, и выяснил, что выполняется условие:
if( !frame ) {
break;
}
Проверял — нужный видеофайл в папке с программой, в плеере он запускается. Все кодеки вроде стоят. У меня Ubuntu 13.10 на виртуалке, версия библиотеки OpenCV — 2.4.8. На другом компьютере с настоящей, не виртуальной Убунтой 10.04 и OpenCV 2.3.1 — то же самое.
Подскажите, пожалуйста, в чем может быть проблема?
Комментарии (31)
RSS свернуть / развернутьВ чем тут может быть проблема?
DeVOLT
noonv
Unhandled exception at 0x00905a4d in 03. Videofile.exe: 0xC0000005: Access violation.
Как с этим быть?
Использую Windows 7 / Visual studio 2010 / OpenCV 2.2.0
AdemRani
noonv
jne100
vlarry
noonv
vlarry
Так же, рекомендую перейти на более свежую версию OpenCV ;)
noonv
vlarry
warning: error opening file (C:\User\VP\ocv\opencv\src\highgui\cvcap_ffmpeg.cpp:452)
Непонятно что это за путь, где он ищет?
vlarry
vlarry
vlarry
vlarry
admin
vlarry
Unhandled exception at 0x00411b05 in ImageAnalysis.exe: 0xC0000005: Access violation reading location 0x0000001c.
и
HIGHGUI ERROR: AVI: Could not seek to position 0.000?
Luminar
Dmitriy
admin
Как же мне тогда запустить видео со звуком в C++?
Dmitriy
Scam
Scam
nikitabugrov
noonv
Проверял — нужный видеофайл в папке с программой, в плеере он запускается. Все кодеки вроде стоят. У меня Ubuntu 13.10 на виртуалке, версия библиотеки OpenCV — 2.4.8. На другом компьютере с настоящей, не виртуальной Убунтой 10.04 и OpenCV 2.3.1 — то же самое.
Подскажите, пожалуйста, в чем может быть проблема?
mgv
noonv
вылетает в строке:
JleHuH213
см.
admin
JleHuH213
nejtr0n
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.