用opencv和C++实现图片的亮度对比度和伽马值修改
时间: 2023-06-19 14:07:52 浏览: 125
可以使用 OpenCV 提供的 `cv::Mat` 类和相关函数来实现图片的亮度、对比度和伽马值的修改。下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
int main() {
// 加载原始图片
cv::Mat img = cv::imread("input.jpg");
// 修改亮度
double alpha = 1.5; // 亮度增加倍数
cv::Mat brightened;
img.convertTo(brightened, -1, alpha, 0);
// 修改对比度
double beta = 50; // 对比度增加值
cv::Mat contrasted;
brightened.convertTo(contrasted, -1, 1, beta);
// 修改伽马值
double gamma = 0.5; // 伽马值
cv::Mat gamma_corrected;
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(contrasted, lookUpTable, gamma_corrected);
// 保存修改后的图片
cv::imwrite("output.jpg", gamma_corrected);
return 0;
}
```
在上面的示例代码中,`convertTo` 函数用于修改亮度和对比度,`LUT` 函数用于修改伽马值。
需要注意的是,修改亮度和对比度时,亮度增加倍数和对比度增加值都可以是负数,表示降低亮度和对比度。
同时,修改伽马值时,可以使用 `cv::Mat` 类的 `convertTo` 函数来将图片转换为 32F 格式,然后使用 `cv::pow` 函数计算每个像素的新值,最后使用 `cv::saturate_cast` 函数将值限制在 0 到 255 之间。最后,使用 `cv::LUT` 函数将新值应用到图片上。
阅读全文