- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
该函数用于对输入图像应用伽马校正(Gamma Correction),这是一种非线性的图像处理技术,主要用于调整图像的亮度和对比度。
给定一个输入的 BGR 或灰度图像以及一个常数 gamma,对图像在 [0, 255] 区间上应用幂律变换(即伽马校正),并返回结果图像。
函数原型
void cv::intensity_transform::gammaCorrection
(
const Mat input,
Mat & output,
const float gamma
)
参数
- input:输入BGR或灰度图像。
- output:伽马校正后的结果图像。
- gamma:在公式 c*r^gamma中的常数,其中 r 是像素值。
示例代码
#include <opencv2/intensity_transform.hpp>
#include <opencv2/opencv.hpp>
void applyGammaCorrection( const cv::Mat& input, cv::Mat& output, float gamma )
{
// 创建查找表
cv::Mat lookUpTable( 1, 256, CV_8U );
uchar* p = lookUpTable.ptr();
for ( int i = 0; i < 256; ++i )
p[ i ] = cv::saturate_cast< uchar >( pow( i / 255.0, gamma ) * 255.0 );
// 应用查找表
cv::LUT( input, lookUpTable, output );
}
int main()
{
// 读取图像
cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );
if ( img.empty() )
{
std::cerr << "无法加载图像!" << std::endl;
return -1;
}
cv::Mat result;
// 设置伽马值
float gamma = 1.5f; // 你可以根据需要调整这个值
// 使用 OpenCV 提供的 gammaCorrection 函数
cv::intensity_transform::gammaCorrection( img, result, gamma );
// 显示原图和处理后的图像
cv::imshow( "Original Image", img );
cv::imshow( "Gamma Corrected Image", result );
cv::waitKey( 0 );
return 0;
}