2013-10-26 5 views
0

Я пытаюсь играть в avi-файл, используя opencv C++ в ubuntu, но я не получаю никакого вывода. Код im using - это стандартный код, который я нашел в Интернете, который используется для воспроизведения AVI-видео, но я не вижу выхода. И да, видео находится в том же каталоге, что и моя папка кода src. Единственное, что я вижу, это то, что на первой итерации цикла while кадр пуст и, следовательно, ломается. но я не знаю, почему это происходит, поскольку видео работает на vlc. Я бы очень признателен за помощь здесь, поскольку я застрял на ней в течение последних 4-5 часов. #include "cv.h" // включить его в используемые основные функции OpenCV. #include "highgui.h" // включить его в функции GUI.OpenCV - Воспроизвести файл AVI

int main(int argc, char** argv) 
{ 
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE); 

//CvCapture* capture = cvCreateFileCapture("20051210-w50s.flv"); 
CvCapture* capture = cvCreateFileCapture("tree.avi"); 
/* if(!capture) 
    { 
     std::cout <<"Video Not Opened\n"; 
     return -1; 
    }*/ 
IplImage* frame = NULL; 

while(1) { 

    frame = cvQueryFrame(capture); 
    //std::cout << "Inside loop\n"; 
    if (!frame) 
     break; 
    cvShowImage("Example3", frame); 
    char c = cvWaitKey(33); 
    if (c == 27) break; 
} 
cvReleaseCapture(&capture); 
cvDestroyWindow("Example3"); 
std::cout << "Hello!"; 
return 0; 
} 
+0

Ваш код хорошо работает на моем ПК. – Haris

+0

действительно ?? может ли быть что-то связанное с ffmpeg ?? – ueg1990

+0

Вам нужно иметь ffmpeg. Он установлен в вашей системе? Был ли он установлен при установке OpenCV? Почему вы закомментировали блок 'if (! Capture) {}'? Если он говорит, что видео нельзя открыть, это либо то, что имя файла неправильное, либо у вас нет поддержки для установки ffmpeg. – JonesV

ответ

0

Вы работаете в режиме отладки или выпуска? В openCV 2.4.4 есть только файл opencv_ffmpeg244.dll (выпуск .dll), но не один для отладки. попробуйте переключиться в режим выпуска.

0

Снимите строки кода:

char c = cvWaitKey(33); 
if (c == 27) break; 

и вместо них, просто добавьте:

cvWaitKey(33); 

Может быть, это может help.Here это код питона, который работал хорошо для меня:

import cv 
if __name__ == '__main__': 
    capture = cv.CreateFileCapture('Wildlife.avi') 
    loop = True 
    while(loop): 
    frame = cv.QueryFrame(capture) 
    if (frame == None): 
      break; 
    cv.ShowImage('Wild Life', frame) 
    char = cv.WaitKey(33) 
    if (char != -1): 
     if (ord(char) == 27): 
      loop = False 

Или this может быть полезно.