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

目录
相关文章
|
3月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
137 7
基于qt的opencv实时图像处理框架FastCvLearn实战
|
3月前
|
文字识别 计算机视觉 开发者
基于QT的OCR和opencv融合框架FastOCRLearn实战
本文介绍了在Qt环境下结合OpenCV库构建OCR识别系统的实战方法,通过FastOCRLearn项目,读者可以学习Tesseract OCR的编译配置和在Windows平台下的实践步骤,文章提供了技术资源链接,帮助开发者理解并实现OCR技术。
171 9
基于QT的OCR和opencv融合框架FastOCRLearn实战
|
3月前
|
计算机视觉
基于QT的opencv插件框架qtCvFrameLearn实战
这篇文章详细介绍了如何基于Qt框架开发一个名为qtCvFrameLearn的OpenCV插件,包括项目配置、插件加载、Qt与OpenCV图像转换,以及通过各个插件学习OpenCV函数的使用,如仿射变换、卡通效果、腐蚀、旋转和锐化等。
54 10
|
3月前
|
机器学习/深度学习 Java 计算机视觉
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
本文记录了使用mingw81_64编译OpenCV 4.5.5、Qt 5.15.2、VTK 9.1的详细过程,包括编译结果截图、编译步骤、遇到的问题及其解决方案,以及相关参考链接。文中还提到了如何编译boost源码为静态库,并提供了测试代码示例。
opencv4.5.5+qt5.15.2+vtk9.1+mingw81_64编译记录
|
4月前
|
计算机视觉
使用QT显示OpenCV读取的图片
使用QT显示OpenCV读取的图片
97 1
|
6月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
211 1
|
6月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
86 1
|
6月前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
110 0
|
6月前
|
计算机视觉
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
101 0
【轻松入门】OpenCV4.8 + QT5.x开发环境搭建
|
5月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城

推荐镜像

更多
下一篇
DataWorks