【Qt&OpenCV 直方图均衡 CLAHE】

简介: 【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函数进行图像缩放的介绍。

目录
相关文章
|
1月前
|
计算机视觉 数据格式
使用opencv在Qt控件上播放mp4文件
使用opencv在Qt控件上播放mp4文件
81 2
|
1月前
|
机器学习/深度学习 API 计算机视觉
Qt5 和 OpenCV4 计算机视觉项目:6~9
Qt5 和 OpenCV4 计算机视觉项目:6~9
119 0
|
1月前
|
机器学习/深度学习 存储 文字识别
Qt5 和 OpenCV4 计算机视觉项目:1~5(5)
Qt5 和 OpenCV4 计算机视觉项目:1~5(5)
53 0
|
8天前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
13 1
|
8天前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
9 1
|
20天前
|
计算机视觉
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
13 0
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
|
8天前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
20 0
|
8天前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
8 0
|
8天前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
5 0
|
8天前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
11 0

推荐镜像

更多