0
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <stdio.h>
#include <iostream>
#include <QDialog>
#include <opencv2\video\video.hpp>
#include <opencv2\opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/flann/miniflann.hpp"
#include <QLabel>
#include <QScrollArea>
#include <QScrollBar>
cv::Mat image1;
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
image1 = cv::imread("D:\\picture.jpg");
QImage       qimage1((uchar*)image1.data,image1.cols,image1.rows,image1.step,QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(qimage1));
}

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

サイズ 720*1280 の写真があります。この写真をサイズ 600*600 のラベルで表示したいと思います。ただし、画像の一部のみを示しています。だから私の質問は、画像のサイズを変更せずに画像全体を表示する方法です。

4

1 に答える 1

3

function を使用できます。ここのQPixmap::scaled()ドキュメントとここの例を参照してください

あなたの場合、次のようになります。

ui->label->setPixmap(QPixmap::fromImage(qimage1).scaled(QSize(600,600), Qt::KeepAspectRatio));

画像自体には影響しません。画像から QPixmap を構築し、600x600 Qlabel に合わせてスケーリングし、アスペクト比を維持します。これがあなたを助けることを願っています。ところで、OpenCV を使用してイメージを読み取る必要はありません。QtQImageクラスでは、QString path_to_image だけで QImage を構築できます。QImage myImg("D:\\picture.jpg");

編集済み(遅れて申し訳ありません):

QScrollArea を追加するには、次のようにコンストラクターで作成する必要があります (Mainwindow には QLabel と QScrollArea しかないと仮定します)。

// constructor, right after ui->setupUi(this);
QScrollArea *scroll=new QScrollArea(this); // creating instance of QScrollarea with mainwindow as it's parent
scroll->setWidget(ui->label); // sets widget, that you want to have scrollbars
this->setCentralWidget(scroll); // sets scrollarea as centralwidget
于 2013-06-01T18:53:21.140 に答える