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