OpenCV中一個函數cvQueryFrame
從攝像頭或者文件中抓取並返回一幀
IplImage* cvQueryFrame( CvCapture* capture );
capture
視頻獲取結構。
函數cvQueryFrame從攝像頭或者文件中抓取一幀,然後解壓並返回這一幀。 這個函數僅僅是函數cvGrabFrame和 函數cvRetrieveFrame在一起調用的組合。 返回的圖像不可以被用戶釋放或者修改。
cvQueryFrame的參數爲CvCapture結構的指針。用來將下一幀視頻文件載入內存,返回一個對應當前幀的指針。與cvLoadImage不同的是cvLoadImage爲圖像分配內存空間,而cvQueryFrame使用已經在cvCapture結構中分配好的內存。這樣的話,就沒有必要通過cvReleaseImage()對這個返回的圖像指針進行釋放,當CvCapture結構被釋放後,每一幀圖像所對應的內存空間即會被釋放。
2、cvCaptureFromCAM
初始化從攝像頭中獲取視頻
- index
- 要使用的攝像頭索引。如果只有一個攝像頭或者用哪個攝像頭也無所謂,那使用參數-1應該便可以。
函數給從攝像頭的視頻流分配和初始化CvCapture結構。目前在Windows下可使用兩種接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有兩種接口:V4L和FireWire(IEEE1394)。
釋放這個結構,使用函數cvReleaseCapture。
讀攝像頭用:CvCapture* capture=cvCaptureFromCAM(0);//參數也可以是-1,
讀AVI文件演示用: CvCapture* capture=cvCaptureFromFile(“XXX.avi”);
3.cvCreateCameraCapture好像還沒有什麼區別
初始化從攝像頭中獲取視頻
CvCapture* cvCreateCameraCapture( int index );
index
要使用的攝像頭索引。如果只有一個攝像頭或者用哪個攝像頭也無所謂,那使用參數-1應該便可以。
函數cvCreateCameraCapture給從攝像頭的視頻流分配和初始化CvCapture結構。目前在Windows下可使用兩種接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有兩種接口:V4L和FireWire(IEEE1394)。
釋放這個結構,使用函數cvReleaseCapture。
4、CvCapture
視頻獲取結構
typedef struct CvCapture CvCapture;
結構CvCapture 沒有公共接口,它只能被用來作爲視頻獲取函數的一個參數。
這個是一個很重要的結構 以後無論是讀取已有視頻還是從攝像頭獲取都必須用到它
然後的工作就是把視屏顯示出來