调整图片亮度

环境:qt5 msvc2015,opencv4

功能:点击选择图片,拖动滑块调整图片亮度,还原图片

展示:

遇到的bug:加载图片后,亮度 颜色显示异常。

在将 OpenCV 加载的图像显示到 Qt 的界面上时,通常需要先将图像从 BGR 格式转换为 RGB 格式,以确保颜色通道的顺序正确,否则图像的颜色可能会显示错误

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QImage>
#include<QPushButton>
#include<QFileDialog>
#include<QDebug>
#include<QMessageBox>
#include"opencv2/opencv.hpp"

using namespace cv;
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public:
    void adjustBrightness(int value);
private slots:
    void onSelectImg();
    void onBrightnessChanged(int value);
    void resetBrightness();
private:
    Ui::Widget *ui;
    Mat src;
    double originalBrightness; // 记录原始的亮度调整值
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    resize(800,700);
    ui->label->setStyleSheet("border:1px solid gray;");
    ui->brightnessSlider->setRange(0,100);

    connect(ui->btnImg, &QPushButton::clicked, this, &Widget::onSelectImg);//点击按钮选择图片给label
    connect(ui->btnResize, &QPushButton::clicked, this, &Widget::resetBrightness);
    connect(ui->brightnessSlider, &QSlider::valueChanged, this, &Widget::onBrightnessChanged);
}

Widget::~Widget()
{
    delete ui;
}



void Widget::adjustBrightness(int value)
{
    cv::Mat dst;
    double alpha = 1.0; // 控制亮度的倍数
    double beta = value - 50; // 控制偏移量

    // 根据用户的亮度值重新调整图像亮度
    src.convertTo(dst, -1, alpha, beta);

    // 将调整后的图像转换为RGB格式
    cv::cvtColor(dst, dst, cv::COLOR_BGR2RGB);

    // 显示调整后的图像
    QImage qimg(dst.data, dst.cols, dst.rows, dst.step, QImage::Format_RGB888);
    QPixmap pixmap = QPixmap::fromImage(qimg);
    ui->label->setPixmap(pixmap);
    ui->label->setScaledContents(true);
}

void Widget::onSelectImg()
{
    QString imagePath = QFileDialog::getOpenFileName(this, "选择图片", "", "Images (*.png *.jpg *.jpeg)");
       src = cv::imread(imagePath.toStdString());
       qDebug() << imagePath;
       if (!src.empty())
       {
           cv::Mat rgbSrc;
           cv::cvtColor(src, rgbSrc, cv::COLOR_BGR2RGB); // 将图像从BGR格式转换为RGB格式

           QImage qimg(rgbSrc.data, rgbSrc.cols, rgbSrc.rows, rgbSrc.step, QImage::Format_RGB888);
           QPixmap pixmap = QPixmap::fromImage(qimg);
           ui->label->setPixmap(pixmap);
           ui->label->setScaledContents(true);

           originalBrightness = 50; // 记录原始亮度调整值
           ui->brightnessSlider->setValue(originalBrightness); // 设置滑块值为原始亮度调整值
       }
       else
       {
           QMessageBox::warning(this, tr("错误"), tr("无法加载图片"));
       }
}

void Widget::onBrightnessChanged(int value)
{
    adjustBrightness(value);
}

void Widget::resetBrightness()
{
    ui->brightnessSlider->setValue(originalBrightness);
}


#QT##Opencv#
全部评论

相关推荐

西南山:哥,你的技能是在报菜单吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务