QT creator中使用opencv采集攝像頭信息


     之前在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控件上顯示)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM