任何人都可以告訴我,在通過ffmpeg解碼之後,視頻數據以何種格式保存在opencv中。我的意思是,如果它被保存爲矩陣,那麼它是8bit /像素的東西?如果有人能夠提供一些文件或鏈接詳細解釋將是一個很大的幫助。我也嘗試谷歌,但無法找到相關的東西。opencv中的視頻數據
謝謝。
任何人都可以告訴我,在通過ffmpeg解碼之後,視頻數據以何種格式保存在opencv中。我的意思是,如果它被保存爲矩陣,那麼它是8bit /像素的東西?如果有人能夠提供一些文件或鏈接詳細解釋將是一個很大的幫助。我也嘗試谷歌,但無法找到相關的東西。opencv中的視頻數據
謝謝。
檢查的明確參考大概是代碼本身!查看文件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的。
非常感謝。我會檢查ffmpeg文件,如果我還有疑問,請回復您。 – MMH 2013-02-15 07:46:36
它看起來像用戶選擇的視頻格式[OpenCVWiki:VideoCodecs](http://opencv.willowgarage.com/wiki/VideoCodecs)。順便說一下,花了大約3秒找到谷歌。記得在詢問之前進行研究。 – Nocturno 2013-02-15 05:24:01
感謝您的評論。但我想知道,它是以矩陣格式或類似的方式保存的?上面的鏈接並沒有真正描述我所問的內容。 – MMH 2013-02-15 05:53:59