2013-10-26 101 views
0

我想在ubuntu中使用opencv C++播放avi文件,但我没有输出。我使用的代码是一个标准的代码,我在网上发现,用于播放avi视频,但我看不到任何输出。是的,视频和我的src代码文件夹在同一个目录下。我看到的唯一的事情是,在while循环的第一次迭代中,帧是空的,因此中断。但我不知道为什么它发生在视频正在使用vlc。我非常感谢这里的一些帮助,因为我在过去的4-5个小时里一直坚持下去。 #include“cv.h”//将其包含到使用的Main 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是Python代码,这对我来说工作得很好:

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对您有帮助。