首页 > 技术文章 > OpenCV 获取摄像头并显示摄像头视频
2020
04-21

OpenCV 获取摄像头并显示摄像头视频

千淘万漉博客阿里云大使推广链接

OpenCV 获取摄像头,新建窗口显示摄像头视频

结合Leaning OpenCV 第二个例子 显示一个视屏文件  写了一下 获取摄像头的代码为并且创建窗口显示的代码为:


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

其中必须说一下几个函数用分割线框起来了


具体是这样的:


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


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 没有公共接口,它只能被用来作为视频获取函数的一个参数。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


这个是一个很重要的结构   以后无论是读取已有视频还是从摄像头获取都必须用到它


然后的工作就是把视屏显示出来


while(1)

{

     pFrame=cvQueryFrame( pCapture );

     if(!pFrame)break;

     cvShowImage("video",pFrame);

     char c=cvWaitKey(33);

     if(c==27)break;

}

在这里解释一下为什么显示视屏的时候要循环


进入While循环之后 开始读入视屏文件


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


cvQueryFrame函数

从摄像头或者文件中抓取并返回一帧


IplImage* cvQueryFrame( CvCapture* capture );

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


最后释放占用资源


显示运行结果

————————————————

版权声明:本文为CSDN博主「Augusdi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Augusdi/article/details/8762961


本文》有 0 条评论

留下一个回复