一、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;
}