一、什么是亮度和对比度

亮度是指图像中像素点的亮度值,对比度是指不同像素点之间亮度差异的大小。亮度越高,图像的明亮度也就越高;对比度越高,图像中亮度差异越明显,图像的锐度也就越高。

二、OpenCV 实现图像亮度和对比度操作

OpenCV 提供了两种实现图像亮度和对比度操作的方法:一是使用 cv::addWeighted 函数;二是使用 cv::convertTo 函数。

1、使用 cv::addWeighted 函数

cv::addWeighted 函数是 OpenCV 中常用的图像叠加函数,可以实现图像的亮度和对比度调节。其函数原型为:

cv::addWeighted(cv::InputArray src1, double alpha, cv::InputArray src2, double beta, double gamma, cv::OutputArray dst, int dtype=-1);
C++

其中,src1 和 src2 为输入图像,alpha 和 beta 为叠加系数,gamma 为偏置值,dst 为输出图像,dtype 为输出图像的数据类型。通过调节 alpha 和 beta 参数,可以实现图像的亮度和对比度调节。

2、使用 cv::convertTo 函数

cv::convertTo 函数是 OpenCV 中常用的图像变换函数,可以实现图像的亮度和对比度调节。其函数原型为:

cv::convertTo(cv::InputArray src, cv::OutputArray dst, int dtype, double alpha=1, double beta=0);
C++

其中,src 为输入图像,dst 为输出图像,dtype 为输出图像的数据类型,alpha 和 beta 为变换系数。通过调节 alpha 和 beta 参数,可以实现图像的亮度和对比度调节。

三、示例代码

下面是使用 OpenCV 实现图像亮度和对比度调节的示例代码:

// 加载图像
cv::Mat src = cv::imread("test.jpg");

// 调整亮度
cv::Mat dst1;
double alpha = 1.5;
double beta = 50;
cv::addWeighted(src, alpha, cv::Mat(), 0, beta, dst1);

// 调整对比度
cv::Mat dst2;
double gamma = 0.5;
cv::convertTo(src, dst2, -1, alpha, gamma);
C++

上面的代码中,alpha 参数用来调节图像的亮度,beta 参数用来调节图像的对比度。