2020-10-22OpenCV 获取摄像头并显示摄像头视频

这篇博客介绍了如何使用OpenCV库在C++中实现从摄像头获取视频流并显示在窗口上的过程。主要涉及的关键函数包括cvCreateCameraCapture用于初始化摄像头捕获,cvQueryFrame用于抓取每一帧,cvShowImage用于在窗口中显示帧,以及cvWaitKey用于检测用户输入。在循环中,程序不断抓取帧并显示,直到用户按下ESC键退出。最后,通过cvReleaseCapture和cvDestroyWindow释放资源并关闭窗口。

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

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


 
  1. #include "stdafx.h"

  2.  
  3. #include <cv.h>

  4. #include <cxcore.h>

  5. #include <highgui.h>

  6.  
  7. int main( int argc, char** argv )

  8. {

  9. //声明IplImage指针

  10. IplImage* pFrame = NULL;

  11.  
  12. //获取摄像头

  13. CvCapture* pCapture = cvCreateCameraCapture(-1);

  14.  
  15. //创建窗口

  16. cvNamedWindow("video", 1);

  17.  
  18. //显示视屏

  19. while(1)

  20. {

  21. pFrame=cvQueryFrame( pCapture );

  22. if(!pFrame)break;

  23. cvShowImage("video",pFrame);

  24. char c=cvWaitKey(33);

  25. if(c==27)break;

  26. }

  27. cvReleaseCapture(&pCapture);

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

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

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

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


 
  1. while(1)

  2. {

  3. pFrame=cvQueryFrame( pCapture );

  4. if(!pFrame)break;

  5. cvShowImage("video",pFrame);

  6. char c=cvWaitKey(33);

  7. if(c==27)break;

  8. }

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

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

最后释放占用资源

显示运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值