73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
#pragma once
|
|
|
|
#include "ImageWorker.h"
|
|
|
|
#include <QMainWindow>
|
|
#include <QThread>
|
|
#include <opencv2/core.hpp>
|
|
|
|
class QAction;
|
|
class QLabel;
|
|
class QSpinBox;
|
|
class QDoubleSpinBox;
|
|
class QPushButton;
|
|
class ImageView;
|
|
|
|
class MainWindow final : public QMainWindow
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit MainWindow(QWidget *parent = nullptr);
|
|
~MainWindow() override;
|
|
|
|
Q_SIGNALS:
|
|
void processRequested(cv::Mat image, ImageWorker::Operation operation, double value, int dx, int dy);
|
|
|
|
private Q_SLOTS:
|
|
void openImage();
|
|
void saveImage();
|
|
void saveImageAs();
|
|
void resetToOriginal();
|
|
void onProcessFinished(ProcessResult result);
|
|
void onProcessFailed(const QString &message);
|
|
void rotateLeft();
|
|
void rotateRight();
|
|
void scaleUp();
|
|
void scaleDown();
|
|
void translateUp();
|
|
void translateDown();
|
|
void translateLeft();
|
|
void translateRight();
|
|
void extractTargets();
|
|
void classifyImage();
|
|
|
|
private:
|
|
void buildUi();
|
|
void setupWorkerThread();
|
|
void updateViews();
|
|
void setBusy(bool busy);
|
|
bool ensureHasImage() const;
|
|
void requestProcess(ImageWorker::Operation operation, double value = 0.0, int dx = 0, int dy = 0);
|
|
bool writeCurrentImageTo(const QString &path);
|
|
|
|
ImageView *originalView_ = nullptr;
|
|
ImageView *processedView_ = nullptr;
|
|
QLabel *infoLabel_ = nullptr;
|
|
QLabel *statusLabel_ = nullptr;
|
|
QDoubleSpinBox *scaleSpin_ = nullptr;
|
|
QDoubleSpinBox *angleSpin_ = nullptr;
|
|
QSpinBox *translateSpin_ = nullptr;
|
|
|
|
QAction *saveAction_ = nullptr;
|
|
QAction *saveAsAction_ = nullptr;
|
|
|
|
QThread workerThread_;
|
|
ImageWorker *worker_ = nullptr;
|
|
|
|
cv::Mat originalImage_;
|
|
cv::Mat processedImage_;
|
|
QString currentPath_;
|
|
bool busy_ = false;
|
|
};
|