qt结合opencv图像处理————对比度亮度调节

对比度亮度调节

图像处理中的对比度和亮度调节是一种非常基础和广泛应用的技术,它可以帮助我们更好地理解和欣赏图像内容,提高图像的整体质量和可用性。

在vscode的IDE中opencv对比度亮度调节的代码实现见我的上一篇文章。

https://blog.csdn.net/m0_46704925/article/details/139046246?spm=1001.2014.3001.5501

结合qt功能实现

Qslier滑动条控件

Qt中的QSlider控件是一种常用的滑动条控件,可以用于调整数值或选择选项。以下是对QSlider控件的介绍:

一、基本功能:

1.提供水平或垂直方向的滑动条界面,用户可以通过拖动滑块来调整值。

2.可以设置最小值、最大值和当前值,以及步长大小。

3.支持鼠标拖动、键盘控制和鼠标滚轮控制。

二、主要属性:

1.minimummaximum: 设置滑动条的最小值和最大值。

2.value: 获取或设置当前值。

3.singleSteppageStep: 设置单步和页步的大小。

4.orientation: 设置滑动条的方向,可选水平或垂直。

5.tickPositiontickInterval: 设置刻度线的位置和间隔。

三、信号:

1.valueChanged(int value): 当滑块位置改变时发出此信号,参数为当前值。

2.sliderPressed(): 当用户开始拖动滑块时发出此信号。

3.sliderReleased(): 当用户释放滑块时发出此信号。

4.sliderMoved(int position): 当滑块正在被拖动时发出此信号,参数为当前位置。

四、代码示例:

QSlider* slider = new QSlider(Qt::Horizontal, this);
slider->setMinimum(0);
slider->setMaximum(100);
slider->setValue(50);
slider->setTickPosition(QSlider::TicksBelow);
slider->setTickInterval(10);

connect(slider, &QSlider::valueChanged, [](int value) {
    qDebug() << "Slider value changed to:" << value;
});

解释一下示例代码

QSlider* slider = new QSlider(Qt::Horizontal, this);

这一行代码创建了一个新的水平方向的QSlider控件,并将其父对象设置为当前对象(this),这里的this一般是指我们创建的父类窗口。

slider->setMinimum(0);
slider->setMaximum(100);
slider->setValue(50);

这三行代码分别设置了滑动条的最小值为0、最大值为100,以及初始值为50。

slider->setTickPosition(QSlider::TicksBelow);
slider->setTickInterval(10);

这两行代码设置了滑动条的刻度线位置为在滑动条下方,以及刻度线的间隔为10个单位。

connect(slider, &QSlider::valueChanged, [](int value) {
    qDebug() << "Slider value changed to:" << value;
});

这段代码建立了一个信号槽连接。当滑动条的值发生变化时,会触发valueChanged信号,并执行lambda表达式中的代码。这里简单地将当前值输出到调试控制台。

这里QDebug的使用需要导入

#include<QDebug>

控件的添加

上述介绍的是代码的形式去添加这个控件,代码是编写在.cpp文件中具体位置如下。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

我们这里直接编辑ui文件,拖拽控件添加。

最后的设计界面如图:

然后是准备我们的槽函数,上面介绍slier控件的信号时有四种信号,我们这里使用两种分别是valueChanged(int value)、sliderMoved(int position)。

分别选中两个槽函数了文件会自动生成相应的槽函数声明。

实现代码

控件属性编辑,这里我只是做一个示例,可根据需求自行修改。

ui->horizontalSlider->setMaximum(99);
ui->horizontalSlider->setMinimum(0);

代码主要三部分,两个槽函数、和我们的对于对比度亮度调节的功能函数

void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
    if (m_MatImg.empty()) {
        return;
    }
    imgProc_contract_brightness(position / 33.3, 0);
        
}
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    if (m_MatImg.empty()) {
            return;
    }
    imgProc_contract_brightness(value / 33.3, 0);

}
void MainWindow::imgProc_contract_brightness(float con, int bri) 
{
    Mat imgSrc = cvImage;                                       
    Mat imgDst = Mat::zeros(imgSrc.size(), imgSrc.type());       
    imgSrc.convertTo(imgDst, -1, con, bri);                      
    NewQImage = QImage(imgDst.data, imgDst.cols, imgDst.rows, imgDst.cols * imgDst.channels(), QImage::Format_RGB888);
    NewcvImage = imgDst;
    imshow();
}

这里的imshow函数在前面的文章中提到过。见文章

https://blog.csdn.net/m0_46704925/article/details/139102841?spm=1001.2014.3001.5501

上述代码只是控制对比度。只需更改返回参数创建第二个slier就可以控制亮度变化。

void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
    if (cvImage.empty()) {
        return;
    }
    imgProc_contract_brightness(1.0, position);
        
}


void MainWindow::on_horizontalSlider_valueChanged(int value)
{
    if (cvImage.empty()) {
            return;
    }
    imgProc_contract_brightness(1.0, value);

}

这样就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值