调整图片亮度
环境: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#
查看17道真题和解析