结合Leaning OpenCV 第二个例子 显示一个视屏文件 写了一下 获取摄像头的代码为而且建立窗口显示的代码为:ide
#include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> 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"); }
其中必须说一下几个函数用分割线框起来了函数
具体是这样的:post
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ui
初始化从摄像头中获取视频 指针
CvCapture* cvCreateCameraCapture( int index );
函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可以使用两种接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有两种接口:V4L和FireWire(IEEE1394)。 code
释放这个结构,使用函数cvReleaseCapture。 视频
返回值为一个blog
CvCapture ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
视频获取结构 索引
typedef struct CvCapture CvCapture;
结构CvCapture 没有公共接口,它只能被用来做为视频获取函数的一个参数。 接口
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
这个是一个很重要的结构 之后不管是读取已有视频仍是从摄像头获取都必须用到它
而后的工做就是把视屏显示出来
while(1) { pFrame=cvQueryFrame( pCapture ); if(!pFrame)break; cvShowImage("video",pFrame); char c=cvWaitKey(33); if(c==27)break; }
在这里解释一下为何显示视屏的时候要循环
进入While循环以后 开始读入视屏文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
从摄像头或者文件中抓取并返回一帧
IplImage* cvQueryFrame( CvCapture* capture );
函数cvQueryFrame从摄像头或者文件中抓取一帧,而后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一块儿调用的组合。返回的图像不能够被用户释放或者修改。抓取后,capture被指向下一帧,可用cvSetCaptureProperty调整capture到合适的帧。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
若是抓取帧为空 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");
最后释放占用资源
显示运行结果