QtでOpenCVを使う
OpenCV
Qtで画像を扱うにはQImageを使うけど、簡単な機能しか付いていないのでOpenCVを使いたい。というわけで、OpenCV 2.2をインストールした。(QtとEigenが2.2から使える?)
グレースケール化
グレースケール化と書いてあるボタンを押したら、グレースケール化をするプログラムを作る。
デザインはこんな感じ。
ボタンはGo to slotでスロットを設定する。
OpenCVを使うために、LIBS += -lopencv_core -lopencv_highgui -lopencv_imgprocとしておく。他の機能を使う場合は適宜追加する。
そんなわけで、ソースは以下の通り。
widget.cpp
#include "widget.h" #include "ui_widget.h" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <QImage> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 元画像の表示 cv::Mat color_image = cv::imread("Parrots.bmp"); QImage image(color_image.data, color_image.cols, color_image.rows, QImage::Format_RGB888); image = image.rgbSwapped(); ui->label->setPixmap(QPixmap::fromImage(image)); } Widget::~Widget() { delete ui; } // グレースケール化 void Widget::on_pushButton_clicked() { cv::Mat color_image = cv::imread("Parrots.bmp"); cv::Mat gray_image; cv::cvtColor(color_image, gray_image, CV_BGR2GRAY); // BGR? QImage image(gray_image.data, gray_image.cols, gray_image.rows, QImage::Format_Indexed8); image = image.convertToFormat(QImage::Format_RGB32); ui->label->setPixmap(QPixmap::fromImage(image)); }