【Qt&OpenCV 直方图均衡 CLAHE】

图像识别工程开发中需要增强图像对比度CLAHE(Contrast Limited Adaptive Histogram Equalization)


前言

越来越多的开发人员选择基于开源的Qt框架与OpenCV来实现界面和算法,其原因不单单是无版权问题,更多是两个社区的发展蓬勃,可用来学习的资料与例程特别丰富。以下是关于利用Qt构建GUI并使用OpenCV中的CLAHE进行直方图均衡处理。
软件版本:Qt-5.12.0/OpenCV-4.5.3
平台:Windows10/11–64

一、CLAHE是什么?

1、介绍

CLAHE类是OpenCV中进行对比度受限的自适应直方图均衡的基类。
该类有2个重要属性:
tilesGridSize:图像被分成称为“tiles”的小块,在OpenCV中,tilesGridSize默认为8x8 ,即整个图像被划分为8纵8横共64块。然后对每一个块进行直方图均衡处理
clipLimit:裁剪限制,此值与对比度受限相对应,对比度限制这个参数是用每块的直方图的每个bins的数和整图的平均灰度分布数的比值来限制的。 裁剪则是将每块图像直方图中超过ClipLimit的bins多出的灰度像素数去除超出部分,然后将所有bins超出的像素数累加后平均分配到所有bins。

2、成员函数

2.1、apply方法

apply方法用于对图像应用对比度受限自适应直方图均衡变换处理。
调用语法: dst = cv.CLAHE.apply( src[, dst] )
参数说明:
src:输入图像,图像类型为CV_8UC1 or CV_16UC1,即8位或16位灰度图
dst:输出图像,类型同输入图像

说明:在进行该方法调用前,必须已经设置了对比度受限自适应直方图均衡算法的受限对比度ClipLimit以及图像分块的行数和列数tiles

2.2、collectGarbage方法

collectGarbage方法应该是进行内存垃圾回收的,没有参数和返回值。

2.3、getClipLimit方法

getClipLimit方法是用于获取当前CLAHE对象设置的ClipLimit值返回。
调用语法: retval = cv.CLAHE.getClipLimit()

2.4、getTilesGridSize方法

getClipLimit方法是用于获取当前CLAHE对象设置的tilesGridSize返回。
调用语法: retval = cv.CLAHE.getTilesGridSize()

2.5、setClipLimit方法

setClipLimit方法是用于设置当前CLAHE对象的ClipLimit值,无返回值。

调用语法: None = cv.CLAHE.setClipLimit( clipLimit )

2.6、setTilesGridSize方法

setTilesGridSize方法是用于设置当前CLAHE对象的tilesGridSize值,无返回值。

调用语法: None = cv.CLAHE.setTilesGridSize( tileGridSize )

二、演示

1、GUI

在这里插入图片描述
如上图创建CLAHE的功能按钮QPushButton,直方图展示在Histgram窗口,效果明显。

2、实现代码

claheBtn的clicked()槽函数实现如下

void MainWindow::on_claheBtn_clicked()
{
    std::size_t numView = ui->tabWidget->currentIndex() % 3;
    if (dispMat[numView]->empty())
    {
        outputInfo(2, tr("Please make sure the Mat exist!"));
        return;
    }

    if (dispMat[numView]->channels() == 3)
    {
        cv::cvtColor(*dispMat[numView], *dispMat[numView], cv::COLOR_BGR2GRAY);
    }

    cv::Ptr<cv::CLAHE> clahe = createCLAHE(2.0, cv::Size(8, 8));	// 创建CLAHE
    clahe->apply(*dispMat[numView], *dispMat[numView]);				// 成员函数apply()
    cvtMatPixmap(dispMat, dispPixmap, numView);
    outputInfo(1, tr("CLAHE done."));
}

总结

以上是关于利用Qt进行GUI构建并使用OpenCV中的split/calcHist/normalized函数进行图像缩放的介绍。
参考:
链接: 往期https://blog.csdn.net/richard_yuu/article/details/127859793
链接: 往期https://blog.csdn.net/richard_yuu/article/details/124140746
其中疑问或错误,欢迎联系交流,微信:electrical_program

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值