opencv 彩色图亮度矫正使用高斯方式 c++代码
时间: 2023-07-24 20:33:58 浏览: 144
opencv c++代码
以下是使用高斯方式进行彩色图像亮度矫正的 C++ 代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 加载彩色图像
Mat image = imread("input.jpg");
// 将彩色图像转换为 LAB 颜色空间
Mat lab_image;
cvtColor(image, lab_image, COLOR_BGR2Lab);
// 分离出亮度信道
std::vector<Mat> lab_channels;
split(lab_image, lab_channels);
Mat l_channel = lab_channels[0];
// 计算亮度信道的均值和标准差
Scalar mean, stddev;
meanStdDev(l_channel, mean, stddev);
// 设置目标均值和标准差
double target_mean = 128.0;
double target_stddev = 64.0;
// 计算亮度信道的平移和缩放参数
double alpha = target_stddev / stddev.val[0];
double beta = target_mean - alpha * mean.val[0];
// 对亮度信道进行高斯平滑
Mat smoothed_l_channel;
GaussianBlur(l_channel, smoothed_l_channel, Size(0, 0), 20);
// 对亮度信道进行平移和缩放
Mat corrected_l_channel = alpha * smoothed_l_channel + beta;
// 将处理后的亮度信道和原图像的色度信道合并
lab_channels[0] = corrected_l_channel;
Mat result_image;
merge(lab_channels, lab_image);
cvtColor(lab_image, result_image, COLOR_Lab2BGR);
// 显示结果图像
imshow("Input Image", image);
imshow("Output Image", result_image);
waitKey(0);
return 0;
}
```
在上述代码中,我们首先加载了一个彩色图像,然后将它转换为 LAB 颜色空间,并分离出亮度信道。接着,我们计算了亮度信道的均值和标准差,并根据目标均值和标准差计算了亮度信道的平移和缩放参数。然后,我们对亮度信道进行高斯平滑,并进行平移和缩放操作,最后将处理后的亮度信道和原图像的色度信道合并,得到最终的结果图像。
阅读全文