ガイド
この記事では主にQt+OpenCVで画像を表示する2つの方法を紹介し、その効果をコードで示します。
背景紹介
OpenCV 自体はいくつかの GUI メソッドを提供しますが、それらの使用には依然として制限があります。C++ を例に挙げると、ほとんどの人は、実際のアプリケーションで GUI プログラムを作成するために Qt または MFC を使用します。対照的に、Qt は MFC よりも使いやすく、豊富なインターフェイス スタイルを備えているため、ますます多くの C++ ビジュアル開発者や企業がビジュアル プロジェクトの GUI として Qt を使用する傾向があります。
Qt で OpenCV イメージを表示するには 2 つの一般的に使用される方法があります。1 つは QLabel を使用して表示する方法、もう 1 つは QGraphicsView を使用して表示する方法です。
実装手順
まず、表示する画像を準備し、OpenCV 環境を設定し (ここではスキップします)、新しい Qt Widgets アプリケーションを作成します。
[1] Label コントロールと Graphics View コントロールを追加し、Label テキスト コンテンツを削除し、枠線を追加します。
[2] 2 つのプッシュ ボタン (それぞれ QLabel と Graphics View という名前) を追加し、レイアウトを簡単に設計します。
[3] ボタンに対応するスロット関数に移動し、コードを追加します。
//QLabel显示OpenCV图像
void MainWindow::on_pushButton_clicked()
{
Mat srcImg = imread("1.jpg");
if(srcImg.empty())
{
QMessageBox::information(this,"警告","图片读取失败,请检查图片路径!");
return;
}
Mat imgShow;
cvtColor(srcImg, imgShow, COLOR_BGR2RGB); // 图像格式转换
QImage qImg = QImage((unsigned char*)(imgShow.data), imgShow.cols,
imgShow.rows, imgShow.cols*imgShow.channels(), QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(qImg.scaled(ui->label->size(), Qt::KeepAspectRatio)));
}
//Graphics View显示OpenCV图像
void MainWindow::on_pushButton_2_clicked()
{
Mat srcImg = imread("2.jpg");
if(srcImg.empty())
{
QMessageBox::information(this,"警告","图片读取失败,请检查图片路径!");
return;
}
Mat imgShow;
cvtColor(srcImg, imgShow, COLOR_BGR2RGB); // 图像格式转换
QImage qImg = QImage((unsigned char*)(imgShow.data), imgShow.cols,
imgShow.rows, imgShow.cols*imgShow.channels(), QImage::Format_RGB888);
QGraphicsScene *scene = new QGraphicsScene;//图像显示
ui->graphicsView->setScene(scene);
ui->graphicsView->show();
scene->addPixmap(QPixmap::fromImage(qImg));
}
[4] 出力結果 (左側が QLabel、右側がグラフィックス ビュー):
デフォルトでは、画像が完全に表示されていない場合、グラフィックス ビューは自動的にスライダーを生成します。
要約する
上記は、Qt+OpenCV で画像を表示する 2 つの方法を示しています。QLabel 方法は初心者や簡単なアプリケーションに適しており、グラフィックス ビューは高度な開発やプロジェクトでの使用に推奨されます。今後も役立つ記事を掲載していきますので、お楽しみに!