LoginSignup
9
5

More than 5 years have passed since last update.

windows 10 64bitのQt 5.7 上でOpenCV 3.1を動かしてみた件

Posted at

はじめに

仕事でちょこまかとOpenCVを使っています。しかし、他の人に活用してもらいたいときはGUIにしたいのですがOpenCV純正のGUIは貧弱でこまっていました。なので、今回はQt上で動かせるようにしてGUI作成の自由度向上を図りたいと思います。

環境

  • OS: windows 10 64 bit
  • Qt: 5.7
  • OpenCV: 3.1.0 (※)

※今回、OpenCVはchocolateyというパッケージマネージャを用いて簡単にインストール出来ました!
chocolatey導入法: https://chocolatey.org/install
chocolatey内OpenCV紹介サイト: https://chocolatey.org/packages/OpenCV

注) OpenCVのdllはpathに登録しておくこと!

QtにOpenCVを取り込むための手順

Step1 .proファイルを下記を追記に修正

QtOpenCV310
win32:DEPENDPATH  += "C:\tools\opencv\build\include"
win32:INCLUDEPATH += "C:\tools\opencv\build\include"
win32:LIBS +=      -L"C:\tools\opencv\build\x64\vc14\lib"
win32:LIBS += -lopencv_world310d

注) OpenCV3.1以降からライブラリの大半がopencv_world310[|d].libに統合されています

Step2 qmakeをビルドを実行

こうすればinclude文の挿入時に、opencvやopencv2フォルダが補完対象になります。

Step3 include宣言部に下記を追加

QtOpenCV310\mainwindow.cpp
#include "opencv2/world.hpp"

注) headerファイルはworldで全て統合されているわけではないので、ビルド時に不足している場合は適宜追加してください。

Step4 ソースコードにOpenCVの記述をお好みで行う!

例としてカメラ映像を出力するコードを書いてみました。

おまけ) cv::Mat -> QImageの変換

cv::MatとQImageの大きな違いは、RGB値の配置が BGR(cv::Mat)RGB(QImage) な点。
cv::cvtColorでRGB値の配置変換し、QImageのコンストラクタを下記コード例の様に対応を合わせれば、簡単に変換可能。

QtOpenCV310\mainwindow.cpp
cv::Mat src, dst;
// get a cv::Mat data as a camera frame
cam >> src;

// cv::Mat -> QImage
cv::cvtColor(src, dst, CV_RGB2BGR);
QImage cam_frame_qimg((uchar *)dst.data, dst.cols, dst.rows,(int)dst.step, QImage::Format_RGB888);
// set painter
QPainter painter(this);
// refresh image
QPoint draw_point(25,25);
// draw a QImage data with QPainter
painter.drawImage(draw_point,cam_frame_qimg);

まとめ

本当に簡単ですがQt上からOpenCVが叩ける方法を残してみました。皆さんのお役に立てるかわかりませんがお役に立てれば幸いです。
明日12/25は@soramimi_jpさんの "Qtを使った自作アプリの宣伝と開発者募集の告知をします" です。お楽しみに。

成果物

今回作ったコード: https://github.com/AkiEga/QtOpenCV310

参考

Qt 5.7 | QImage http://doc-snapshots.qt.io/qt5-5.7/qimage.html
Qt 5.7 | QPainter http://doc-snapshots.qt.io/qt5-5.7/qpainter.html

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5