用opencv_ffmpeg播放视频

Posted on 2010-04-21 19:57 hushell 阅读(4152) 评论(0)  编辑 收藏 引用
今天刚开始学opencv,计算机视觉就这样被斯坦福的牛人写出开源库了,相比之下我好像无关紧要的普通人,很自卑啊...
不过,起点低不是问题,要一直坚持下去。好了,说说我弄了一个多小时的事情吧。

运行eg ch2-2:
 1 cvNamedWindow("T2", CV_WINDOW_AUTOSIZE);
 2     //CvCapture *cap = cvCreateFileCapture(argv[1]);
 3     CvCapture* cap = cvCreateFileCapture( "test.avi" );
 4     if (!cap)
 5         printf("Nothing has been captured!\n");
 6     IplImage *frame;
 7     while(1)
 8     {
 9         frame = cvQueryFrame(cap);
10         if (!frame)
11         {
12             break;
13         }
14         cvShowImage("T2", frame);
15         char c = cvWaitKey(33);
16         if (c == 27)
17             break;
18         
19     }
20     cvReleaseCapture(&cap);
21     cvDestroyWindow("T2");
结果视频怎么也播放不出来,窗口一闪而过。
于是我去源码里看:
CV_IMPL CvCapture * cvCreateFileCapture (const char * filename)
           
|
           
| // #ifdef WIN32
          V
CvCapture
* cvCreateFileCapture_Win32(const char * filename)
{
    CvCapture_FFMPEG_proxy
* result = new CvCapture_FFMPEG_proxy;
    
if( result->open( filename ))
        
return result;
    delete result;
    
return cvCreateFileCapture_VFW(filename);
}
很显然,如果用ffmpeg打开视频失败就会调用windows SDK的AVIFileOpen,但是很诡异的是书的examples里面的test.avi竟然不能被解码。我用windows media player也打不开,说明AVIFileOpen确实很弱。于是我去编译了opencv的release源码,一定要是release,因为源码里面LoadLibrary的时候就是导入的opencv_ffmpeg200.dll。这样有了这个动态库之后就可以流程的播放视频了。

cvCreateFileCapture 这个函数还是做得很好的,可以兼容很多多媒体编解码库。


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理