用c++实现改变一张图片的对比度,亮度,伽马值
时间: 2024-05-10 19:16:40 浏览: 59
OpenCV实现图像对比度、亮度值调整(C++实现).zip
要实现改变一张图片的对比度、亮度和伽马值,可以使用OpenCV库。下面是一个简单的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图片
Mat image = imread("test.jpg");
// 改变对比度
double alpha = 1.5; // 对比度增强系数
Mat new_image = Mat::zeros(image.size(), image.type());
for (int y = 0; y < image.rows; y++) {
for (int x = 0; x < image.cols; x++) {
for (int c = 0; c < image.channels(); c++) {
new_image.at<Vec3b>(y, x)[c] =
saturate_cast<uchar>(alpha * (image.at<Vec3b>(y, x)[c]));
}
}
}
// 改变亮度
int beta = 50; // 亮度增强值
new_image.convertTo(new_image, -1, 1, beta);
// 改变伽马值
double gamma = 0.5; // 伽马值
Mat gamma_image = Mat::zeros(image.size(), image.type());
for (int y = 0; y < image.rows; y++) {
for (int x = 0; x < image.cols; x++) {
for (int c = 0; c < image.channels(); c++) {
gamma_image.at<Vec3b>(y, x)[c] =
saturate_cast<uchar>(pow((image.at<Vec3b>(y, x)[c] / 255.0), gamma) * 255.0);
}
}
}
// 显示结果
imshow("Original Image", image);
imshow("New Image", new_image);
imshow("Gamma Image", gamma_image);
waitKey(0);
return 0;
}
```
这个程序中,首先读取了一张名为"test.jpg"的图片,然后分别进行了对比度、亮度和伽马值的修改,并通过imshow函数将结果显示出来。
对比度的修改是通过遍历图像的像素点,对每个像素的颜色值进行增强,具体的增强系数是通过alpha来控制的。
亮度的修改是通过将图像的每个像素的颜色值都加上一个常数beta来实现的。
伽马值的修改是通过将图像的每个像素的颜色值做一个幂运算,具体的幂值是通过gamma来控制的。需要注意的是,在进行幂运算之前,需要将像素的颜色值归一化到[0,1]之间,然后再将结果乘以255,将像素值还原到[0,255]之间。
阅读全文