欢迎访问宙启技术站
智能推送

使用QSlider()实现图像亮度调节功能

发布时间:2024-01-12 11:19:09

QSlider是Qt的一个调节控件,可以用于实现图像亮度的调节功能。下面是一个使用QSlider实现图像亮度调节的例子:

首先,创建一个Qt应用程序,并添加一个QLabel用于显示图像,一个QSlider用于调节亮度,以及相关的布局和控件连接代码。在这个例子中,我们使用OpenCV库加载和处理图像。首先,我们需要在.pro文件中添加OpenCV库的链接。

# .pro文件
QT += widgets
LIBS += -lopencv_core -lopencv_highgui -lopencv_imgproc

HEADERS += \
        mainwindow.h

SOURCES += \
        main.cpp \
        mainwindow.cpp

RESOURCES += \
        resources.qrc
...

接下来,需要创建一个MainWindow类,并实现亮度调节的功能:

mainwindow.h 文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <opencv2/opencv.hpp>
#include <QMainWindow>
#include <QSlider>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void setBrightness(int value);

private:
    cv::Mat image;
    cv::Mat processedImage;
    QLabel* imageLabel;
    QSlider* brightnessSlider;

    void loadImage();
    void updateImage();
};

#endif // MAINWINDOW_H

mainwindow.cpp 文件

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    loadImage();

    imageLabel = new QLabel(this);
    imageLabel->setPixmap(QPixmap::fromImage(QImage(image.data, image.cols, image.rows, QImage::Format_RGB888)));
    setCentralWidget(imageLabel);

    brightnessSlider = new QSlider(Qt::Horizontal, this);
    brightnessSlider->setRange(-100, 100);
    brightnessSlider->setValue(0);
    brightnessSlider->setTickPosition(QSlider::TicksBelow);
    connect(brightnessSlider, &QSlider::valueChanged, this, &MainWindow::setBrightness);

    statusBar()->addPermanentWidget(brightnessSlider);
}

MainWindow::~MainWindow()
{
}

void MainWindow::loadImage()
{
    cv::Mat tempImage = cv::imread("image.jpg");
    cv::cvtColor(tempImage, image, cv::COLOR_BGR2RGB);
}

void MainWindow::updateImage()
{
    cv::Mat tempImage;
    cv::cvtColor(processedImage, tempImage, cv::COLOR_BGR2RGB);
    imageLabel->setPixmap(QPixmap::fromImage(QImage(tempImage.data, tempImage.cols, tempImage.rows,
                                                    QImage::Format_RGB888)));
}

void MainWindow::setBrightness(int value)
{
    image.convertTo(processedImage, -1, 1, value);
    updateImage();
}

在上述代码中,loadImage函数用于加载图像,并使用cv::cvtColor函数将图像从BGR格式转换为RGB格式,以适应QImage的格式。updateImage函数用于更新图像显示,并使用cv::cvtColor函数将处理后的图像从BGR格式转换为RGB格式。setBrightness函数用于将图像亮度调整为指定的值,并根据调整后的图像更新图像显示。

编译和运行上述代码后,会出现一个GUI窗口,其中包含一个显示加载的图像的标签和一个滑块。通过移动滑块,可以调整图像的亮度。根据滑块的值,调用setBrightness函数来调整图像的亮度,并使用updateImage函数更新图像显示。

尝试编译和运行上述代码,并通过调节滑块来调整图像的亮度。您可以将图像替换为自己的图像,并对代码进行适当的修改来满足您的需求。这只是一个简单的例子,您可以根据自己的需求来进行更复杂的图像处理操作。