opencv學習筆記二

一、Opencv常用庫文件的作用

1.cxcore:基礎數據結構,數組結構,動態內存結構,繪圖函數等

   Cv:圖像處理,結構分析,運動分析目標跟蹤,模式識別,攝像頭定標等

   ML:機器學習(聚類,分類等)

   HighGUI:圖像顯示,視頻讀取等

   CvCam:攝像頭接口(廢除)

Cvaux:輔助性的不成熟的算法

二、Opencv讀取視頻

1.獲取視頻文件頭信息 CvCapture* cvCreateFileCapture(char*);

獲取文件信息,並分配一幀圖像的內存.

2. 從攝像頭或者文件中抓取並返回一幀

IplImage* cvQueryFrame(CvCapture*);

3.創建窗口並顯示 void cvNamedWindow(char*);

void cvShowImage(char*,IplImage*);

4.釋放內存 void cvReleaseCapture(CvCapture*);

          void cvDestroyWindow(char*);

注意:問題:CvCapture指針返回空,有可能是沒有安裝解碼器。

三、常用函數

1.獲取視頻文件屬性:doublecvGetCaptureProperty(Capture*,int);

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- 視頻文件中幀的總數

 

2.修改視頻播放的屬性:cvSetCaptureProperty(Capture*,int,double);

3.創建跟蹤條:

int cvCreateTrackbar(

const char* trackbar_name,

const char* window_name,

int* value,

int count,

CvTrackbarCallback on_change);


四、示例程序

#include "stdafx.h"

#include "cv.h"

#include "cxcore.h"

#include "highgui.h"

 

char*name = "D:\\我的文檔\\Visual Studio2010\\Projects\\cv_read_video\\cv_read_video\\friend.avi";

CvCapture* cap = NULL;

intg_pos = 0;

voidon_change(int pos)

{

       cvSetCaptureProperty(cap,CV_CAP_PROP_POS_FRAMES,pos);

}

 

intmain()

{

       cvNamedWindow("window");

       cap =cvCreateFileCapture(name); //CvCreateFileCapture函數,獲取視頻信息的數據結構指針,並開闢空間

       int max = (int)cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_COUNT);//cvGetCaptureProperty函數獲取視頻的具體信息

       cvCreateTrackbar("bar","window",&g_pos,max,on_change);//cvCreateTrackbar函數創建Trackbar

       IplImage*frame = cvQueryFrame(cap); //cvQuery函數,讀取下一禎

       while(1)

       {

              cvShowImage("window",frame);

              cvSetTrackbarPos("bar","window",g_pos);

              g_pos++;

              frame= cvQueryFrame(cap);

              char key = cvWaitKey(20); //cvWaitKey控制幀率

              if(key == 27) //判斷是否是ESC

              {

                     break;

              }

       }

       cvReleaseCapture(&cap);

       cvDestroyWindow("window");

       return 0;

}

 

發佈了39 篇原創文章 · 獲贊 122 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章