歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OpenCV中關於cvGetCaptureProperty函數

OpenCV中提供了一個函數cvGetCaptureProperty(Capture* cap,int property_index)函數來獲取視頻文件的一些屬性,這是其中的OpenCV中屬性的一些宏定義:

#define CV_CAP_PROP_POS_MSEC 0
#define CV_CAP_PROP_POS_FRAMES 1
#define CV_CAP_PROP_POS_AVI_RATIO 2
#define CV_CAP_PROP_FRAME_WIDTH 3
#define CV_CAP_PROP_FRAME_HEIGHT 4
#define CV_CAP_PROP_FPS 5
#define CV_CAP_PROP_FOURCC 6
#define CV_CAP_PROP_FRAME_COUNT 7
#define CV_CAP_PROP_FORMAT 8
#define CV_CAP_PROP_MODE 9
#define CV_CAP_PROP_BRIGHTNESS 10
#define CV_CAP_PROP_CONTRAST 11
#define CV_CAP_PROP_SATURATION 12
#define CV_CAP_PROP_HUE 13
#define CV_CAP_PROP_GAIN 14
#define CV_CAP_PROP_EXPOSURE 15
#define CV_CAP_PROP_CONVERT_RGB 16
#define CV_CAP_PROP_WHITE_BALANCE 17
#define CV_CAP_PROP_RECTIFICATION 18

通過創建一個Capture對象的指針後,調用cvGetCaptureProperty即可獲取上述任何相關屬性;但是我們不能太依賴這個函數;比如我們想獲取一段視頻的幀數,我們就不能太依賴於CV_CAP_PROP_FRAME_COUNT這個屬性;因為cvGetCaptureProperty對屬性的訪問,其實訪問的是關聯視頻文件的文件頭信息,並不是真正去訪問了視頻的圖像數據,這就帶來一個問題:我們在講其他視頻格式轉換為AVI格式的時候,圖像幀數並沒改變,只是視頻文件頭改變了,這時直接通過get函數讀取的信息就可能不准確;最好的辦法是迭代從視頻中取出一幀,檢查是否有數據,來確定該視頻文件的總共幀數~~~

不光是幀數,幀率也可能不對~~

比如,自己在實驗中庸狸窩轉換器將一段視頻轉換為avi格式的視頻文件後,用下面的兩段代碼,結果差距很大:


code 1.
CvCapture *cap = cvCaptureFromFile(videoName);//獲取視頻
int numFrames = (int) cvGetCaptureProperty(cap, CV_CAP_PROP_FRAME_COUNT);//得到視頻幀數,筆者獲得的結果為148

code 2.

IplImage* pImg=NULL;
int count=0;
while((pImg=cvQueryFrame(cap))!=NULL)
{
count++;
}//得到的幀數只有60幀;


究其原因其實就是cvGetCaptureProperty實現的機制上,它只是讀取視頻文件頭信息,而不是真正讀取了視頻文件;因此在進行不同格式的視頻文件轉換為OpenCV支持的AVI時,可能獲取的屬性並不准確~~~

因此在使用該函數時,要注意。自己的經驗是對於原始的AVI文件,可以直接使用該函數(code1),而經過轉換而得到的視頻文件,最好使用code 2。。

其實最希望的是OpenCV能夠支持更多的視頻格!

--------------------------------------分割線 --------------------------------------

Ubuntu Linux下安裝OpenCV2.4.1所需包 http://www.linuxidc.com/Linux/2012-08/68184.htm

Ubuntu 12.04 安裝 OpenCV2.4.2 http://www.linuxidc.com/Linux/2012-09/70158.htm

CentOS下OpenCV無法讀取視頻文件 http://www.linuxidc.com/Linux/2011-07/39295.htm

Ubuntu 12.04下安裝OpenCV 2.4.5總結 http://www.linuxidc.com/Linux/2013-06/86704.htm

Ubuntu 10.04中安裝OpenCv2.1九步曲 http://www.linuxidc.com/Linux/2010-09/28678.htm

基於QT和OpenCV的人臉識別系統 http://www.linuxidc.com/Linux/2011-11/47806.htm

--------------------------------------分割線 --------------------------------------

OpenCV的詳細介紹:請點這裡
OpenCV的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved