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

从博客上看到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");
    //销毁窗口
}

 

效果如下:
【opencv学习之四】opencv调取本地摄像头_第1张图片

你可能感兴趣的:(opencv)