implemented contrast slider
This commit is contained in:
@@ -4,23 +4,24 @@
|
||||
#include <opencv2/imgcodecs.hpp>
|
||||
#include <opencv2/imgproc.hpp>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <opencv2/core/mat.hpp>
|
||||
#include <QColorTransform>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <zbar.h>
|
||||
|
||||
AdjustPictureDialog::AdjustPictureDialog(QWidget *parent, std::string imagePath)
|
||||
: QDialog(parent)
|
||||
, ui(new Ui::AdjustPictureDialog){
|
||||
, ui(new Ui::AdjustPictureDialog)
|
||||
, pixmap(QString::fromStdString(imagePath))
|
||||
, img(pixmap.toImage()){
|
||||
ui->setupUi(this);
|
||||
|
||||
computeContrastLookupTable();
|
||||
|
||||
scene = new QGraphicsScene(this);
|
||||
|
||||
ui->graphicsView->setScene(scene);
|
||||
QGraphicsPixmapItem p;
|
||||
QString path = QString::fromStdString(imagePath);
|
||||
QPixmap pixmap = QPixmap(path);
|
||||
scene->addPixmap(pixmap);
|
||||
}
|
||||
|
||||
@@ -66,12 +67,39 @@ std::string AdjustPictureDialog::decode() {
|
||||
result = symbol->get_data();
|
||||
}
|
||||
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void AdjustPictureDialog::on_contrastSlider_sliderMoved(int position) {
|
||||
void AdjustPictureDialog::computeContrastLookupTable() {
|
||||
|
||||
for (int contrastValue = 0; contrastValue < 100; ++contrastValue) {
|
||||
double contrast = contrastValue / 50.0;
|
||||
for (int i = 0; i < 256; ++i) {
|
||||
unsigned short correctedValue = std::clamp(static_cast<int>(128 + contrast * (i - 128)), 0, 255);
|
||||
contrastLUT[contrastValue].push_back(correctedValue);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AdjustPictureDialog::on_contrastSlider_sliderMoved(int position) {
|
||||
QImage image = img.copy();
|
||||
|
||||
uint32_t* pixels = reinterpret_cast<uint32_t*>(image.bits());
|
||||
int width = image.width();
|
||||
int height = image.height();
|
||||
|
||||
for (int y = 0; y < height; ++y) {
|
||||
for (int x = 0; x < width; ++x) {
|
||||
QRgb rgb = pixels[y * width + x];
|
||||
pixels[y * width + x] = qRgba(
|
||||
contrastLUT[position][qRed(rgb)],
|
||||
contrastLUT[position][qGreen(rgb)],
|
||||
contrastLUT[position][qBlue(rgb)],
|
||||
qAlpha(rgb));
|
||||
}
|
||||
}
|
||||
|
||||
scene->clear();
|
||||
scene->addPixmap(QPixmap::fromImage(image));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user