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");
}



运行结果如下:

 

 
posted @ 2016-01-16 15:22  Edver  阅读(3856)  评论(0编辑  收藏  举报