opencv打開攝像頭並新建窗口顯示


幾個程序使用的基本函數如下:

*******************************************************************

cvCreateCameraCapture

初始化從攝像頭中獲取視頻

CvCapture* cvCreateCameraCapture( int index );
index 要使用的攝像頭索引。如果只有一個攝像頭或者用哪個攝像頭也無所謂,那使用參數-1便可以。

函 數cvCreateCameraCapture給從攝像頭的視頻流分配和初始化CvCapture結構。目前在Windows下可使用兩種接 口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有兩種接口:V4L和FireWire(IEEE1394)。

釋放這個結構,使用函數cvReleaseCapture。

返回值為一個

CvCapture
************************************************************************************************

CvCapture

視頻獲取結構

typedef struct CvCapture CvCapture;

結構CvCapture 沒有公共接口,它只能被用來作為視頻獲取函數的一個參數。

******************************************************************************

cvQueryFrame

從攝像頭或者文件中抓取並返回一幀
IplImage* cvQueryFrame( CvCapture* capture );
capture
視頻獲取結構。
函數cvQueryFrame從攝像頭或者文件中抓取一幀,然后解壓並返回這一幀。 這個函數僅僅是函數 cvGrabFrame和 函數 cvRetrieveFrame在一起調用的組合。 返回的圖像不可以被用戶釋放或者修改。
cvQueryFrame的參數為CvCapture結構的指針。用來將下一幀視頻文件載入內存,返回一個對應當前幀的指針。與 cvLoadImage不 同的是cvLoadImage為圖像分配內存空間,而cvQueryFrame使用已經在CvCapture結構中分配好的內存。這樣的話,就沒有必要通 過cvReleaseImage()對這個返回的圖像指針進行釋放,當CvCapture結構被釋放后,每一幀圖像所對應的內存空間即會被釋放。

如果抓取幀為空   break 打破循環

否則將抓取的那一幀顯示在創建的窗口上

cvShowImage("video",pFrame);

當前幀顯示后

char c=cvWaitKey(33);
if(c==27)break;

我們等待33ms

如果用戶觸發了按鍵,將按鍵的ASCII值給C

如果C為ESC(ASCII 為27)循環退出

最后釋放capture 和window

  cvReleaseCapture(&pCapture);
  cvDestroyWindow("video");

最后釋放占用資源

程序代碼如下:

======================================================================

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#pragma   comment(linker, "/subsystem:\"windows\"   /entry:\"mainCRTStartup\"")
int main(int argc, char** argv)
{
	//聲明IplImage指針
	IplImage* pFrame = NULL;

	//獲取攝像頭
	CvCapture* pCapture = cvCreateCameraCapture(-1);

	//創建窗口
	cvNamedWindow("video", 1);

	//顯示視屏
	while (1)
	{
		pFrame = cvQueryFrame(pCapture);
		if (!pFrame)break;
		cvShowImage("video", pFrame);
		char c = cvWaitKey(33);
		if (c == 27)break;
	}
	cvReleaseCapture(&pCapture);
	cvDestroyWindow("video");
}



運行結果如下:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM