【opencv学习之四】opencv调取本地摄像头

来源:互联网 发布:科隆群岛 知乎 编辑:程序博客网 时间:2024/05/22 11:30

从博客上看到opencv如何调取摄像头,例程代码跑了一下,效果可以,下面是代码,Qt配置opencv和之前介绍的一样,pro中添加opencv路径,include时候包含头文件名字就OK。

我是加在mainWindow下调用的,只要调用就可以,下面是代码:

#include "mainwindow.h"#include "ui_mainwindow.h"#include "cv.h"#include "highgui.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);}MainWindow::~MainWindow(){    delete ui;}void MainWindow::on_pushButton_clicked(){       //下面的代码在mian函数里或用其他函数调用即可,我加了按钮调用;        IplImage* pFrame = NULL;    //声明IplImage指针    CvCapture* pCapture = cvCreateCameraCapture(-1);    //获取摄像头    //-1为默认摄像头,其他则需要填写地址;    //函数cvCreateCameraCapture给从摄像头的视频流分配和初始化CvCapture结构。    //目前在Windows下可使用两种接口:Video for Windows(VFW)    //和Matrox Imaging Library(MIL);    //Linux下也有两种接口:V4L和FireWire(IEEE1394)。    //释放这个结构,使用函数cvReleaseCapture。    //返回值为一个    // CvCapture    cvNamedWindow("video", 1);    //创建窗口    while(1)//显示视屏    {        pFrame=cvQueryFrame( pCapture );        // 函数cvQueryFrame从摄像头或者文件中抓取一帧,        //然后解压并返回这一帧。        //这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。        //返回的图像不可以被用户释放或者修改。抓取后,capture被指向下一帧,        //可用cvSetCaptureProperty调整capture到合适的帧。        if(!pFrame)break;        //如果PFrame为空,则跳出循环;        cvShowImage("video",pFrame);        //当前帧显示后        char c=cvWaitKey(33);        //我等待33ms        if(c==27)break;        //如果用户触发了按键,将按键的ASCII值给C        //如果C为ESC(ASCII 为27)循环退出    }    cvReleaseCapture(&pCapture);    //释放Capture;    cvDestroyWindow("video");    //销毁窗口}

 

效果如下:

0 0
原创粉丝点击