photo mosaic 好多张图片拼成一张完整的图片
原理:
读取原始图片,进行分割,分析每个小块RGB均值,并存储。
读取若干图片,提取并存储各个图片的RGB均值。与原始图片的每个小块进行匹配。
可以采用OpenMP进行并行加速
通过选择等级还可以设置最后 生成图片的“质量”,“清晰度”,并导出到本地。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextStream>
#include <QBoxLayout>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QString s = QCoreApplication::applicationDirPath ();
qDebug()<<s;
ui->setupUi(this);
m_matchflag = -1;
m_wnum = 0;
m_hnum = 0;
m_zoomBase = 1;
m_zoomMos = 1;
ui->zoomBig1->setVisible(false);
ui->zoomBig2->setVisible(false);
ui->zoomSmall1->setVisible(false);
ui->zoomSmall2->setVisible(false);
m_base = new QLabel(this);
m_mosaic = new QLabel(this);
m_mosaicImg = new QImage();
m_baseImg2 = new QImage();
m_baseImg = new IplImage();
m_saveDialog = new MsaveDialog(this);
m_saveDialog->hide();
connect(ui->baseimg, QPushButton::clicked,this,MainWindow::askMainImagePath);
connect(ui->subimg, QPushButton::clicked,this,MainWindow::askSubImageDir);
connect(ui->start, QPushButton::clicked,this,MainWindow::startLoadeImgInfo);
connect(m_saveDialog,MsaveDialog::saveMosaic,this,MainWindow::saveMosaic);
ui->scrollArea->setWidget(m_base);
ui->scrollArea_2->setWidget(m_mosaic);
ui->baseimg->setStyleSheet("QPushButton"
"{"
"border-radius:15px;"
" background-color: rgb(0, 170, 255);"
"color: rgb(255, 255, 255);"
"font-size:26px;"
"font-family:System;"
"}"
"QPushButton:pressed{"
"background:rgb(86, 128, 136);"
"}");
ui->subimg->setStyleSheet("QPushButton"
"{"
"border-radius:15px;"
" background-color: rgb(0, 170, 255);"
"color: rgb(255, 255, 255);"
"font-size:26px;"
"font-family:System;"
"}"
"QPushButton:pressed{"
"background:rgb(86, 128, 136);"
"}");
ui->start->setStyleSheet("QPushButton"
"{"
"border-radius:15px;"
" background-color: rgb(150,150,150);"
"color: rgb(255, 255, 255);"
"font-size:26px;"
"font-family:System;"
"}"
);
}
void MainWindow::askSubImageDir()
{
QString subFilePath = QFileDialog::getExistingDirectory(0, "Select the directory of pictures",