覚え書きブログ

Qtの覚え書き(カメラ画像の表示編)

Qtで、下図のようにロボットを制御するためのカメラ画像を表示するGUIアプリケーションを作成してみた。
f:id:hirotaka_hachiya:20160412093320p:plain

Qtには、Qt Multimediaというマルチメディアを扱うモジュールがある。今回は、Qt MultimediaのQCameraおよびQCameraViewfinderクラスを用いた。
http://doc.qt.io/qt-5/qtmultimedia-index.html
http://doc.qt.io/qt-5/qcameraviewfinder.html

手順を一応メモっておく。

1)Qt_creatorで,「CameraQT」という名前のDialogベースのプロジェクトを作成する。そして、下図のように「viewfinder」という名前のQWidgetオブジェクトを追加する。
f:id:hirotaka_hachiya:20160411222142p:plain

2)オブジェクト「viewfinder」のクラスを、QWidgetからQCameraViewfinderに格上げする。
具体的には、viewfinderオブジェクトを右クリックして、「格上げ先」->「QCameraViewfinder」を選択する。
もし、格上げ先に、QCameraViewfinderが無ければ、「格上げ先を指定」を選択し、「格上げされたクラス名」に、「QCameraViewfinder」を入力して、「格上げ」をクリックする。
f:id:hirotaka_hachiya:20160411223046p:plain

3)CameraQT.proに、multimediaモジュールを追加する。
具体的には、下記の行をCameraQT.proに追加する。
QT += multimedia multimediawidgets

4)dialog.hとdialog.cppを以下のように修正する。
【dialog.h】

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

// headers for capturing camera image
#include <QCamera>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
    Ui::Dialog *ui;
    QCamera *camera;                    // camera interface
};

#endif // DIALOG_H

【dialog.cpp】

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

    // set the viewfinder of camera and start to display image
    camera = new QCamera;
    camera->setViewfinder(ui->viewfinder);
    camera->start();
}

Dialog::~Dialog()
{
    delete ui;
}

5)ビルドして実行する。

ちなみに、上記のプロジェクトファイル一式は、下記からダウンロードできる。
https://drive.google.com/open?id=0B3uB4w2FEJbIV0ppTWFyTTJabEU

以上のように、QtのMultimediaモジュールを用いると非常に簡単にカメラの画像を表示するGUIアプリケーションが作れる。しかも、クロスプラットフォームにも対応している。https://drive.google.com/open?id=0B3uB4w2FEJbIV0ppTWFyTTJabEU