之前在QT creator上成功編譯了opencv,由於課題需要,需要采集攝像頭的信息。故搜集了網上的一些資料,依葫蘆畫瓢的照着做了一下,終於簡單的成功采集了信息。
打開QTcreator,新建一個widget工程。

在界面上放兩個label 分別用來顯示攝像頭采集到的數據和照的照片。

在widget.h中的源代碼如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QImage>
#include <QTimer> //設置采集數據的間隔時間
#include <highgui.h>
#include <cv.h>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void openCamara(); //打開時攝像頭
void readFarme(); //讀取當前幀信息
void closeCamara();//關閉攝像頭
void takingPictures(); //拍照
private:
Ui::Widget *ui;
QTimer *timer;
QImage *imag;
CvCapture *cam;//視頻獲取結構,用來作為視頻獲取函數的一個參數
IplImage *frame;//申請IplImage類型指針,就是申請內存空間來存放每一幀圖像
};
#endif // WIDGET_H
在widget.cpp中的源文件如下:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
cam=NULL;
timer=new QTimer(this);
imag=new QImage();
connect(timer,SIGNAL(timeout()),this,SLOT(readFarme()));
connect(ui->open,SIGNAL(clicked()),this,SLOT(openCamara()));
connect(ui->pic,SIGNAL(clicked()),this,SLOT(takingPictures()));
connect(ui->close,SIGNAL(clicked()),this,SLOT(closeCamara()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::openCamara()
{
cam=cvCreateCameraCapture(0);
timer->start(33);
}
void Widget::readFarme()
{
frame=cvQueryFrame(cam);
// QImage imag((const uchar*)frame->imageData,frame->width,frame->height,QImage::Format_RGB888);
QImage imag=QImage((const uchar*)frame->imageData,frame->width,frame->height,QImage::Format_RGB888).rgbSwapped();
ui->label->setPixmap(QPixmap::fromImage(imag));
}
void Widget::closeCamara()
{
timer->stop();
cvReleaseCapture(&cam);//釋放內存;
}
void Widget::takingPictures()
{
frame = cvQueryFrame(cam);
QImage imag((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);
ui->label_2->setPixmap(QPixmap::fromImage(imag));
}
好了,全部代碼都OK了。
(大致思路是:點擊打開攝像頭按鈕,則開啟攝像頭,並設置一個定時器,每隔一段時間捕獲攝像頭攝取到的幀,將其轉換成QImage,最最后在QLabel控件上顯示)
