cvGetCaptureProperty是我們需要使用到的獲取視頻屬性的函數。
double cvGetCaptureProperty( CvCapture* capture, int property_id );
capture 視頻獲取結構。
property_id 屬性標識。
CV_CAP_PROP_POS_MSEC - 影片目前位置,為毫秒數或者視頻獲取時間戳
CV_CAP_PROP_POS_FRAMES - 將被下一步解壓/獲取的幀索引,以0為起點
CV_CAP_PROP_POS_AVI_RATIO-視頻文件的相對位置(0 - 影片的開始,1 - 影片的結尾)
CV_CAP_PROP_FRAME_WIDTH - 視頻流中的幀寬度
CV_CAP_PROP_FRAME_HEIGHT-視頻流中的幀高度
CV_CAP_PROP_FPS - 幀率
CV_CAP_PROP_FOURCC - 表示codec的四個字符
CV_CAP_PROP_FRAME_COUNT- 視頻文件中幀的總數
函數cvGetCaptureProperty獲得攝像頭或者視頻文件的指定屬性。
譯者注:有時候這個函數在cvQueryFrame被調用一次後,再調用cvGetCaptureProperty才會返回正確的數值。這是一個bug,建議在調用此函數前先調用cvQueryFrame。
cvCreateTrackbar(創建滾動條)
該函數為開放計算機視覺(OpenCV)庫庫函數,創建trackbar並將它添加到指定的窗口。
定義:
CV_EXTERN_C_FUNCPTR( void (*CvTrackbarCallback)(int pos) );
int cvCreateTrackbar( const char* trackbar_name, const char* window_name, int* value, int count, CvTrackbarCallback on_change );
參數:
trackbar_name 被創建的trackbar名字。
window_name 窗口名字,這個窗口將為被創建trackbar的父對象。
value 整數指針,它的值將反映滑塊的位置。這個變量指定創建時的滑塊位置。
count 滑塊位置的最大值。最小值一直是0。
on_change 每次滑塊位置被改變的時候,被調用函數的指針。這個函數應該被聲明為void Foo(int); 如果沒有回調函數,這個值可以設為NULL。
函數cvCreateTrackbar用指定的名字和范圍來創建trackbar(滑塊或者范圍控制),指定與trackbar位置同步的變量,並且指定當trackbar位置被改變的時候調用的回調函數。
被創建的trackbar默認顯示在指定窗口的頂端,可以通過函數cvGetTrackbarPos來獲取trackbar顯示的位置信息,以及通過函數cvSetTrackbarPos來重新設置trackbar的顯示位置。
代碼如下:
#include <cv.h>
#include <highgui.h>
CvCapture* capture = NULL;
int pos=0; //視頻位置
void ON_Change(int n)
{
cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,n); //設置視頻走到pos位置
}
int _tmain(int argc, _TCHAR* argv[])
{
cvNamedWindow("show"); //新建一個窗口
capture =cvCreateFileCapture("F:\\TDDOWNLOAD\\10.Little.Asians.16\\fle-10la16a.avi");//創建一個視頻
int frames = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT); //返回視頻幀的總數
cvCreateTrackbar("frame","show",&pos,frames,ON_Change);//創建滾動條
IplImage * frame;//聲明視頻幀
while(1)
{
frame = cvQueryFrame(capture); //獲取下一幀圖像
if (!frame)
{
break; //如果不存在退出
}
pos++; //播放一幀位置加1
//cvSetTrackbarPos("frame","show",pos);//設置進度條位置 加入此語句後視頻會變卡
cvShowImage("show",frame); //在窗口顯示圖像
char c = cvWaitKey(33); //間隔33ms
if (c == 27) //如果按下Esc鍵中斷
break;
}
cvReleaseCapture(&capture); //釋放視頻空間
cvDestroyWindow("show"); //銷毀窗口
}
--------------------------------------分割線 --------------------------------------
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的下載地址:請點這裡