- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
cv::cuda::CLAHE 是 OpenCV 的 CUDA 模块中提供的一个类,用于在 GPU 上执行对比度受限的自适应直方图均衡(Contrast Limited Adaptive Histogram Equalization, CLAHE)。CLAHE 是一种图像处理技术,旨在提高图像局部区域的对比度,同时限制了对比度增强的程度以避免噪声的放大。
主要功能
- 局部对比度增强:通过将图像划分为小块,并对每个小块进行直方图均衡化来提升局部对比度。
- 对比度限制:通过设置阈值来限制单个灰度值的最大贡献,从而防止噪声被过度放大。
- GPU 加速:利用 NVIDIA GPU 进行加速计算,适用于实时或高性能需求的应用场景。
类概述
以下是 cv::cuda::CLAHE 的一些关键成员函数和说明:
构造函数
CLAHE(double clipLimit=40.0, int tileGridSize=8):
clipLimit:对比度限制阈值。默认值为 40.0。
tileGridSize:划分网格的大小(以像素为单位)。默认值为 8x8。
设置与获取参数
//设置对比度限制。
void setClipLimit
(
double clipLimit
)
double getClipLimit() const://获取对比度限制
// 设置划分网格的大小。
void setTilesGridSize
(
cv::Size tileGridSize
)
cv::Size getTilesGridSize() const://获取划分网格的大小。
应用 CLAHE
void apply
(
InputArray src,
OutputArray dst
):
//在给定输入图像上应用 CLAHE 算法,并将结果存储在输出图像中。
src:输入图像,通常是灰度图像。
dst:输出图像,与输入图像具有相同的尺寸和类型。
示例代码
以下是一个简单的例子,演示如何使用 cv::cuda::CLAHE 对图像进行处理:
#include <opencv2/cudaarithm.hpp> // 包含CUDA算术运算头文件
#include <opencv2/cudaimgproc.hpp> // 包含CUDA图像处理头文件
#include <opencv2/opencv.hpp>
int main()
{
// 加载图像
cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png", cv::IMREAD_GRAYSCALE );
if ( img.empty() )
{
std::cerr << "无法加载图像" << std::endl;
return -1;
}
// 将图像上传到GPU
cv::cuda::GpuMat d_img;
d_img.upload( img );
// 创建CLAHE对象
cv::Ptr< cv::cuda::CLAHE > clahe = cv::cuda::createCLAHE( 40.0, cv::Size( 8, 8 ) );
// 输出图像
cv::cuda::GpuMat d_result;
// 应用CLAHE
clahe->apply( d_img, d_result );
// 下载结果到主机内存
cv::Mat result;
d_result.download( result );
// 显示原始图像和处理后的图像
cv::imshow( "Original Image", img );
cv::imshow( "CLAHE Enhanced Image", result );
cv::waitKey( 0 );
return 0;
}