调整图片亮度
环境: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#