opencv 彩色图亮度过曝的部分矫正 c++代码
时间: 2023-07-24 20:38:31 浏览: 108
opencv图像修补
您可以使用以下代码来校正彩色图像的过曝部分:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat image = imread("input.jpg");
if (image.empty())
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
Mat hsv;
cvtColor(image, hsv, COLOR_BGR2HSV);
std::vector<Mat> channels;
split(hsv, channels);
// 计算亮度通道的均值和标准差
Scalar mean, stddev;
meanStdDev(channels[2], mean, stddev);
// 计算阈值
double threshold = mean.val[0] + stddev.val[0];
// 将亮度通道的过曝部分进行修正
for (int i = 0; i < channels[2].rows; i++)
{
for (int j = 0; j < channels[2].cols; j++)
{
if (channels[2].at<uchar>(i, j) > threshold)
{
channels[2].at<uchar>(i, j) = threshold;
}
}
}
merge(channels, hsv);
Mat result;
cvtColor(hsv, result, COLOR_HSV2BGR);
imwrite("output.jpg", result);
return 0;
}
```
在这个例子中,我们将输入图像读取到一个Mat对象中。接下来,我们将图像从BGR颜色空间转换为HSV颜色空间。然后,我们将HSV图像分成3个单独的通道。我们计算亮度通道的均值和标准差,并将均值和标准差的总和作为阈值。然后,我们遍历亮度通道的每个像素,并将亮度值大于阈值的像素值设置为阈值。最后,我们将3个通道合并回一个图像中,并将其从HSV颜色空间转换回BGR颜色空间。最后,我们将输出图像保存到磁盘上。
阅读全文