2013-02-15 65 views
0

任何人都可以告訴我,在通過ffmpeg解碼之後,視頻數據以何種格式保存在opencv中。我的意思是,如果它被保存爲矩陣,那麼它是8bit /像素的東西?如果有人能夠提供一些文件或鏈接詳細解釋將是一個很大的幫助。我也嘗試谷歌,但無法找到相關的東西。opencv中的視頻數據

謝謝。

+0

它看起來像用戶選擇的視頻格式[OpenCVWiki:VideoCodecs](http://opencv.willowgarage.com/wiki/VideoCodecs)。順便說一下,花了大約3秒找到谷歌。記得在詢問之前進行研究。 – Nocturno 2013-02-15 05:24:01

+0

感謝您的評論。但我想知道,它是以矩陣格式或類似的方式保存的?上面的鏈接並沒有真正描述我所問的內容。 – MMH 2013-02-15 05:53:59

回答

2

檢查的明確參考大概是代碼本身!查看文件modules/highgui/src/cap_ffmpeg_impl.hpp中的功能CvCapture_FFMPEG::open。此方法由例如cvCaptureFromAVI()cvCaptureFromFile()調用。下面摘錄的代碼清楚地顯示了文件的寬度和高度,但忽略了輸入位深度,並始終在內存中使用視頻的8:8:8比特RGB表示形式(如PIX_FMT_BGR24常數所示):

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0) 
    int err = avformat_open_input(&ic, _filename, NULL, NULL); 
#else 
    int err = av_open_input_file(&ic, _filename, NULL, 0, NULL); 
#endif 

    .......  

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(53, 3, 0) 
    avformat_find_stream_info(ic, NULL); 
#else 
    av_find_stream_info(ic); 
#endif 

    .......  

    avpicture_fill((AVPicture*)&rgb_picture, rgb_picture.data[0], 
        PIX_FMT_BGR24, enc->width, enc->height); 

進一步的證據表明,這種情況是由下面的代碼在CvCapture_FFMPEG::retrieveFrame提供:

img_convert_ctx = sws_getCachedContext(
       NULL, 
       video_st->codec->width, video_st->codec->height, 
       video_st->codec->pix_fmt, 
       video_st->codec->width, video_st->codec->height, 
       PIX_FMT_BGR24, 
       SWS_BICUBIC, 
       NULL, NULL, NULL 
       ); 

望着ffmpeg的文檔,在此調用的PIX_FMT_BGR24指定目的地像素格式,即什麼將被交給OpenCV的。

+0

非常感謝。我會檢查ffmpeg文件,如果我還有疑問,請回復您。 – MMH 2013-02-15 07:46:36