OpenCV之显示摄像头图像

来源:互联网 发布:杭州东站到淘宝城 编辑:程序博客网 时间:2024/05/16 14:42

OpenCV之显示摄像头图像

我们使用Opencv的函数来读取显示摄像头的图像,首先要声明图像指针,读取图像,创建窗口,然后显示每一帧的图像。

使用的函数

1.cvCreateCameraCapture

函数作用:初始化从摄像头中获取视频

C++ code

CvCapture* cvCreateCameraCapture( int index );

index:要使用的摄像头索引。如果只有一个摄像机时,参数值取0。
当参数被设置为-1时,OpenCV会打开一个窗口让用户选择需要使用的摄像机。

函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接口:Video for Windows(VFW)和Matrox Imaging Library(MIL); Linux下也有两种接口:V4L和FireWire(IEEE1394)。

释放这个结构,使用函数cvReleaseCapture。


2.cvQueryFrame

OpenCV中一个函数cvQueryFrame从摄像头或者文件中抓取并返回一帧

C++ code

IplImage* cvQueryFrame( CvCapture* capture );

capture 视频获取结构。

函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。 这个函数仅仅是函数cvGrabFrame和 函数cvRetrieveFrame在一起调用的组合。 返回的图像不可以被用户释放或者修改。

cvQueryFrame的参数为CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在CvCapture结构中分配好的内存。这样的话,就没有必要通过cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像所对应的内存空间即会被释放。


3.CvCapture

视频获取结构

C++ code

typedef struct CvCapture CvCapture;

while(1){     pFrame=cvQueryFrame( pCapture );     if(!pFrame)break;     cvShowImage("video",pFrame);     char c=cvWaitKey(33);     if(c==27)break;}
结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。

这个是一个很重要的结构 以后无论是读取已有视频还是从摄像头获取都必须用到它,然后的工作就是把视屏显示出来
如果抓取帧为空 break 打破循环
否则将抓取的那一帧显示在创建的窗口上
cvShowImage(“video”,pFrame);
当前帧显示后
char c=cvWaitKey(33);
if(c==27)break;
我们等待33ms
如果用户触发了按键,将按键的ASCII值给C
如果C为ESC(ASCII 为27)循环退出
最后释放占用资源


4.实例代码

#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");}
0 0
原创粉丝点击