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

OpenCV播放視頻並控制位置

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的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved