如果隻是做研究,用AviSynth + K-Lite Code Pack來解決這個問題吧。
K-Lite Code Pack裡面包括ffdshow,是一套video codec的組合,它提供
Video For Windows 的接口,OpenCV的這個函數就是用這個接口;
然後用AviSynth這個virtual frame server來包裝這個mpeg檔案,建立一
個簡單的script,比如mobile.avs,裡面隻有一行:
MpegSource("mobile.mpg")
當然這取決于你的mpeg的檔案的壓縮方式,也許需要額外的AviSynth的plugin.
裝好K-lite Codec和AviSynth之後,你可以先用播放器直接放這個mobile.avs
檔案看是否行得通。
視訊實際上的讀取過程是:
原始視訊 -> ffdshow -> AviSynth -> OpenCV -> IplImage
K-lite Codec Pack首頁:http://www.codecguide.com/download_kl.htm
AviSynth首頁:http://www.avisynth.org/
相關讨論區:http://www.doom9.org/
另外一條路是基于DirectShow filter/sample grabber的辦法來讀取video frames,
可以看看: http://windowssdk.msdn.microsoft.com/en-us/library/ms787867.aspx
這種方法需要下載下傳DirectX SDK和DirectShow的addon,同時也需要相關codec,
視訊的讀取過程是:
原始視訊 -> codec -> DirectShow(frame grabber) -> Windows Bitmap -> IplImage
如果是隻做研究用,推薦第一條;如果是商業用途,得要看license來決定了。