OpenCV 获取摄像头,新建窗口显示摄像头视频
2011-04-09 20:31
597 查看
结合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");
}
其中必须说一下几个函数用分割线框起来了
具体是这样的:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
index 要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。
函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。目前在Windows下可使用两种接
口:Video for Windows(VFW)和Matrox Imaging Library(MIL);
Linux下也有两种接口:V4L和FireWire(IEEE1394)。
释放这个结构,使用函数cvReleaseCapture。
返回值为一个
结构CvCapture 没有公共接口,它只能被用来作为视频获取函数的一个参数。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
这个是一个很重要的结构 以后无论是读取已有视频还是从摄像头获取都必须用到它
然后的工作就是把视屏显示出来
while(1)
{
pFrame=cvQueryFrame( pCapture );
if(!pFrame)break;
cvShowImage("video",pFrame);
char c=cvWaitKey(33);
if(c==27)break;
}
在这里解释一下为什么显示视屏的时候要循环
进入While循环之后 开始读入视屏文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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");
最后释放占用资源
显示运行结果
#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");
最后释放占用资源
显示运行结果
相关文章推荐
- OpenCV 获取摄像头,新建窗口显示摄像头视频
- OpenCV 获取笔记本摄像头,新建窗口显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV获取摄像头数据并显示在窗口里 Python实现
- Zedboard摄像头获取视频设计问题篇(四)-OpenCV+QT配置显示图片
- opencv获取摄像头视频并显示
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- OpenCV学习笔记(1):获取摄像头并显示摄像头视频
- OpenCV 获取摄像头并显示摄像头视频
- 《OpenCV》Part2 OpenCV3.1.0调用摄像头显示视频并拍照
- windows opencv新手读取视频或摄像头,一闪而过,只显示第一帧
- opencv使用笔记本摄像头获取视频问题解决
- 基于opencv在摄像头ubuntu根据视频获取
- opencv 3 获取摄像头视频
- opencv::将两幅图像合并后,在同一个窗口显示;并将合并的图像流保存成视频文件
- 使用 Visual Studio 2008 和 OpenCV 在窗口显示图片或视频
- [opencv]3.获取摄像头的视频流