OpenCV计算摄影学(12)色调映射(ToneMapping)的一个类cv::TonemapMantiuk
- 开源代码
- 2025-09-14 16:12:02

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述
cv::TonemapMantiuk 是 OpenCV 库中用于实现色调映射(Tone Mapping)的一个类,它基于 Mantiuk 等人提出的算法。色调映射是将高动态范围(HDR)图像转换为低动态范围(LDR)图像的过程,使得结果可以在常规显示器上显示。Mantiuk 的方法是一种流行的全局色调映射算子,旨在保留原始场景中的对比度和颜色信息,同时适应显示器的亮度范围。
主要特点 全局操作:该算法不考虑图像的局部特性,而是对整个图像应用相同的变换。参数调整:用户可以通过调整几个关键参数来控制输出图像的视觉效果,包括伽马校正、饱和度增强和对比度比例因子等。 主要成员函数process():这是主要的功能函数,接收一个或多个 HDR 图像,并返回经过色调映射处理后的 LDR 图像。此函数通常需要与 cv::MergeDebevec 或其他 HDR 合并技术结合使用。
getGamma() / setGamma(float gamma):获取/设置伽马值,用于调整图像的亮度分布。
getScale() / setScale(float scale):获取/设置对比度缩放因子,影响最终图像的对比度水平。
getSaturation() / setSaturation(float saturation):获取/设置饱和度增强因子,用于控制色彩的鲜艳程度。
代码示例 #include <opencv2/opencv.hpp> #include <opencv2/photo.hpp> using namespace cv; int main() { // 假设已经有一个HDR图像"hdr_image" cv::Mat hdr_image = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hdr_image.hdr", cv::IMREAD_ANYDEPTH ); if ( hdr_image.empty() ) { std::cerr << "无法加载HDR图像!" << std::endl; return -1; } // 创建色调映射对象,并设置夸张的参数以增加视觉上的差异 cv::Ptr< cv::TonemapMantiuk > tonemap = cv::createTonemapMantiuk( 1.5f, 4.0f, 3.0f ); // gamma, scale, saturation // 执行色调映射 cv::Mat ldr_image; tonemap->process( hdr_image, ldr_image ); // 将LDR图像强度归一化到[0, 255]范围 double minVal, maxVal; cv::minMaxLoc( ldr_image, &minVal, &maxVal ); // 获取色调映射后图像的最大最小值 ldr_image = 255 * ( ldr_image - minVal ) / ( maxVal - minVal ); // 归一化到[0, 255] ldr_image.convertTo( ldr_image, CV_8U ); // 显示结果或保存图像 cv::Mat normalized_hdr_image; cv::minMaxLoc( hdr_image, &minVal, &maxVal ); // 获取HDR图像的最大最小值 hdr_image.convertTo( normalized_hdr_image, CV_8U, 255.0 / maxVal ); // 正规化显示HDR图像 cv::imshow( "Original HDR Image", normalized_hdr_image ); cv::imshow( "Tone Mapped LDR Image", ldr_image ); cv::imwrite( "enhanced_ldr_image.jpg", ldr_image ); cv::waitKey( 0 ); cv::destroyAllWindows(); return 0; } 运行结果OpenCV计算摄影学(12)色调映射(ToneMapping)的一个类cv::TonemapMantiuk由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“OpenCV计算摄影学(12)色调映射(ToneMapping)的一个类cv::TonemapMantiuk”
 
               
               
              ![[office]excel中四舍五入的教程#经验分享#媒体](/0pic/pp_57.jpg) 
               
               
               
               
               
   
   
   
   
   
   
   
   
   
   
   
  