First prototype
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
#include "clahe.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
CLAHE::CLAHE()
|
||||||
|
{
|
||||||
|
_clahe = cv::createCLAHE();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLAHE::loadFile(const QString &path)
|
||||||
|
{
|
||||||
|
cv::Mat tmp;
|
||||||
|
tmp = cv::imread(path.toStdString(), cv::IMREAD_COLOR | cv::IMREAD_ANYDEPTH);
|
||||||
|
double scale = tmp.depth()==CV_8U ? 1.0/255 : 1.0/65535;
|
||||||
|
tmp.convertTo(tmp, CV_32F, scale);
|
||||||
|
cv::cvtColor(tmp, tmp, cv::COLOR_BGR2Lab);
|
||||||
|
cv::split(tmp, _image);
|
||||||
|
_image[0].convertTo(_lumImage, CV_16U, 655.35);
|
||||||
|
double min, max;
|
||||||
|
cv::minMaxLoc(_image[0], &min, &max);
|
||||||
|
qDebug() << scale << min << max;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLAHE::saveFile(const QString &path)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CLAHE::apply(float clipLimit, int kernelSize)
|
||||||
|
{
|
||||||
|
cv::Mat lum;
|
||||||
|
_clahe->setClipLimit(clipLimit);
|
||||||
|
_clahe->setTilesGridSize(cv::Size(kernelSize, kernelSize));
|
||||||
|
_clahe->apply(_lumImage, lum);
|
||||||
|
//lum = _lumImage;
|
||||||
|
lum.convertTo(_image[0], CV_32F, 1.0/655.35);
|
||||||
|
double min, max;
|
||||||
|
cv::minMaxLoc(_image[0], &min, &max);
|
||||||
|
qDebug() << min << max;
|
||||||
|
}
|
||||||
|
|
||||||
|
QPixmap CLAHE::getImage() const
|
||||||
|
{
|
||||||
|
cv::Mat tmp;
|
||||||
|
cv::merge(_image, 3, tmp);
|
||||||
|
cv::cvtColor(tmp, tmp, cv::COLOR_Lab2RGB);
|
||||||
|
tmp.convertTo(tmp, CV_8U, 255);
|
||||||
|
QImage ret(tmp.data, tmp.cols, tmp.rows, tmp.step, QImage::Format_RGB888);
|
||||||
|
//ret.bits();//perform deep copy of tmp.data pointer
|
||||||
|
return QPixmap::fromImage(ret);
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#ifndef CLAHE_H
|
||||||
|
#define CLAHE_H
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
|
#include <QPixmap>
|
||||||
|
#include <QString>
|
||||||
|
#include <opencv2/imgproc.hpp>
|
||||||
|
#include <opencv2/imgcodecs.hpp>
|
||||||
|
|
||||||
|
class CLAHE
|
||||||
|
{
|
||||||
|
cv::Mat _lumImage;
|
||||||
|
cv::Mat _image[3];
|
||||||
|
cv::Ptr<cv::CLAHE> _clahe;
|
||||||
|
public:
|
||||||
|
CLAHE();
|
||||||
|
void loadFile(const QString &path);
|
||||||
|
void saveFile(const QString &path);
|
||||||
|
void apply(float clipLimit, int kernelSize);
|
||||||
|
QPixmap getImage() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CLAHE_H
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
# Project created by QtCreator 2020-01-21T16:48:44
|
||||||
|
#
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
QT += core gui
|
||||||
|
|
||||||
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
|
||||||
|
TARGET = clahe
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
# The following define makes your compiler emit warnings if you use
|
||||||
|
# any feature of Qt which has been marked as deprecated (the exact warnings
|
||||||
|
# depend on your compiler). Please consult the documentation of the
|
||||||
|
# deprecated API in order to know how to port your code away from it.
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
# You can also make your code fail to compile if you use deprecated APIs.
|
||||||
|
# In order to do so, uncomment the following line.
|
||||||
|
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||||
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
|
CONFIG += c++11 link_pkgconfig
|
||||||
|
|
||||||
|
PKGCONFIG += opencv
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
main.cpp \
|
||||||
|
mainwindow.cpp \
|
||||||
|
clahe.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
mainwindow.h \
|
||||||
|
clahe.h
|
||||||
|
|
||||||
|
# Default rules for deployment.
|
||||||
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
|
!isEmpty(target.path): INSTALLS += target
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include <QStandardPaths>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QMenuBar>
|
||||||
|
#include "clahe.h"
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
|
||||||
|
{
|
||||||
|
setupUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::openFile()
|
||||||
|
{
|
||||||
|
QStringList list = QStandardPaths::standardLocations(QStandardPaths::StandardLocation::PicturesLocation);
|
||||||
|
list.append("");
|
||||||
|
QString path = QFileDialog::getOpenFileName(this, tr("Open image"), list.first(), tr("Images (*.png *.jpg *.jpeg);;All files (*)"));
|
||||||
|
if(!path.isEmpty())
|
||||||
|
{
|
||||||
|
CLAHE cl;
|
||||||
|
cl.loadFile(path);
|
||||||
|
cl.apply(5, 64);
|
||||||
|
QPixmap pixmap;
|
||||||
|
pixmap = cl.getImage();
|
||||||
|
_image->setPixmap(pixmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::saveFile()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupUI()
|
||||||
|
{
|
||||||
|
resize(1024, 768);
|
||||||
|
|
||||||
|
QMenu *fileMenu = menuBar()->addMenu(tr("File"));
|
||||||
|
fileMenu->addAction(tr("Open file"), this, SLOT(openFile()), QKeySequence("Ctrl+O"));
|
||||||
|
fileMenu->addAction(tr("Save file"), this, SLOT(saveFile()), QKeySequence("Ctrl+S"));
|
||||||
|
fileMenu->addAction(tr("Quit"), this, SLOT(close()), QKeySequence("Ctrl+Q"));
|
||||||
|
|
||||||
|
_image = new QLabel(this);
|
||||||
|
setCentralWidget(_image);
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <QLabel>
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
QLabel *_image;
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget *parent = nullptr);
|
||||||
|
~MainWindow();
|
||||||
|
public slots:
|
||||||
|
void openFile();
|
||||||
|
void saveFile();
|
||||||
|
private:
|
||||||
|
void setupUI();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAINWINDOW_H
|
||||||
Reference in New Issue
Block a user