大佬可以直接繞路,我只是爲了給和我一樣的菜雞一點啓發,一開始我也很懵逼,完全不知道怎麼下手。
通過搜索引擎找到的方式大致有兩種:
1.採用OpenCV直接調用相關函數進行拼接:參考鏈接
2.採用QT本身圖片操作相關的類(本文章採用的方式):思路參考
解決本問題的主題思想就是:用QPixmap創建一個大圖,將兩幅圖片用Qpainter畫到大圖上
代碼如下:
//main.cpp
#include "MainWindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
//MainWindow .h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void displayImage();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//MainWindow.cpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QPainter>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
displayImage();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::displayImage()
{
QImage img1;
img1.load("C:/Users/Pictures/Camera Roll/1.jpg");
int img1width = img1.width();
int img1height = img1.height();
QImage img2;
img2.load("C:/Users/Desktop/2.jpg");
int img2width = img2.width();
int img2height = img2.height();
int newImageWidth = img1width + img2width;
int newImageHeight = img1height > img2height ? img1height : img2height;
ui->label->setGeometry(0, 0, newImageWidth, newImageHeight);
QPixmap newImage(newImageWidth, newImageHeight); //1.創建大圖(使用QImage類也可以)
QPainter p(&newImage);
p.fillRect(newImage.rect(), QBrush("#e8eae9")); //空白區域顏色填充
//2.繪製兩幅小圖到QPixmap上
QRect imgRect1(0, 0, img1.width(), img1.height());
p.drawImage(imgRect1, img1);
QRect imgRect2(img1.width(), 0, img2.width(), img2.height());
p.drawImage(imgRect2, img2);
QPixmap image = newImage.scaled(1280, 1080, Qt::KeepAspectRatio); //控制縮放比例,因爲label顯示有大小限制
ui->label->clear(); //清空緩存區,否則會導致第二次加載同一張圖片不會顯示,詳細百度有說
ui->label->setPixmap(image); //3.方便起見,直接採用label顯示
}
正確運行截圖如下:
自己一開始沒有進行縮放,一張圖片過大,會導致圖片顯示不全:解決參考鏈接
有什麼問題歡迎歡迎指正,代碼風格可能不是很優美,希望我把思想說明白了。
也可以繼續拼接多張圖片,我自己嘗試了三張,更高深的圖片操作,可能就需要使用opencv了