OpenCV计算摄影学(11)色调映射算法类cv::TonemapDrago
- 人工智能
- 2025-09-15 03:09:02

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述
cv::TonemapDrago 是 OpenCV 中实现的基于 Paul Debevec 和 Jorge Moraleda 以及后来由 Rogier van de Weijer 和 Theo Drago 改进的色调映射算法的一个具体类。该算法特别适用于高动态范围(HDR)图像到低动态范围(LDR)图像的转换,目的是让 HDR 图像能够在标准显示器上显示,同时尽可能地保留原始图像中的细节和色彩。
主要特点全局与局部对比度:cv::TonemapDrago 算法通过平衡图像的全局和局部对比度来增强视觉效果。它能够自适应调整图像亮度,避免过度曝光或曝光不足的问题。
参数调节:
Gamma (γ): 控制输出图像的伽马校正值,默认值为1.0。伽马校正影响中间亮度级别的表现。Saturation: 控制色彩饱和度,默认值为1.0。增加这个值会使颜色更加鲜艳,但过高可能导致不自然的颜色表现。Bias: 控制压缩曲线的偏置,用于调整亮区和暗区之间的权重。默认值通常设置为0.85,但是你可以根据需要进行调整以获得最佳效果。 方法介绍createTonemapDrago(float gamma = 1.0f, float saturation = 1.0f): 创建一个 cv::TonemapDrago 对象,并允许用户指定初始的伽马值和饱和度值。
process(InputArray src, OutputArray dst): 这是核心方法,用于执行色调映射操作。src 参数应为32位浮点型、BGR格式的HDR图像,而 dst 则为经过色调映射后的LDR图像。
代码示例 #include <opencv2/opencv.hpp> #include <opencv2/photo.hpp> using namespace cv; int main() { // 加载HDR图像 Mat hdr = imread( "path_to_hdr_image.hdr", IMREAD_ANYDEPTH ); if ( hdr.empty() ) { printf( "Could not open or find the HDR image.\n" ); return -1; } // 创建TonemapDrago对象并设置参数 Ptr< TonemapDrago > tonemapDrago = createTonemapDrago( 1.0, 1.0 ); Mat ldr; // 执行色调映射 tonemapDrago->process( hdr, ldr ); // 将像素值归一化到[0, 1]范围内,然后转换到8位无符号整数 ldr *= 255; ldr.convertTo( ldr, CV_8U ); // 显示结果 imshow( "Original HDR Image", hdr ); imshow( "Tone-mapped LDR Image", ldr ); waitKey( 0 ); return 0; } 运行结果OpenCV计算摄影学(11)色调映射算法类cv::TonemapDrago由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“OpenCV计算摄影学(11)色调映射算法类cv::TonemapDrago”