图片伽马值和亮度有什么区别
时间: 2023-06-19 15:07:30 浏览: 192
图片的伽马值和亮度是两个不同的概念。
图片的伽马值是指图像的亮度和显示器的亮度之间的关系。在数字图像处理中,为了更好地显示亮度和色彩,通常需要对图像进行伽马校正。伽马校正是指在图像处理过程中,通过对亮度进行非线性变换,使图像在显示器上呈现出更好的亮度和色彩效果。常见的伽马值为2.2,即将图像的亮度值进行2.2次方运算。
而亮度是指图像中像素的明暗程度。在数字图像中,亮度通常是通过像素的灰度值来表示的,灰度值越大,像素的亮度越高,灰度值越小,像素的亮度越低。在图像处理中,可以通过调整亮度来改变图像的整体明暗程度,从而实现图像的亮度调整。
相关问题
用opencv和C++实现图片的亮度对比度和伽马值修改
可以使用 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` 函数将新值应用到图片上。
使用C++和opencv实现对图片亮度对比度和伽马值调整
可以使用以下代码来实现对图片的亮度、对比度和伽马值的调整:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读取图片
Mat img = imread("image.jpg", IMREAD_COLOR);
if (img.empty()) {
cout << "读取图片失败!" << endl;
return -1;
}
// 亮度调整
Mat img_brightness;
img.convertTo(img_brightness, -1, 1.5, 0); // 增加亮度
imshow("Brightness", img_brightness);
// 对比度调整
Mat img_contrast;
img.convertTo(img_contrast, -1, 1.5, 50); // 增加对比度
imshow("Contrast", img_contrast);
// 伽马值调整
Mat img_gamma;
double gamma = 0.5; // 伽马值
Mat lookUpTable(1, 256, CV_8U);
uchar* p = lookUpTable.ptr();
for (int i = 0; i < 256; i++) {
p[i] = saturate_cast<uchar>(pow(i / 255.0, gamma) * 255.0);
}
LUT(img, lookUpTable, img_gamma);
imshow("Gamma", img_gamma);
waitKey(0);
return 0;
}
```
在上面的代码中,首先使用 `imread` 函数读取了一张图片,然后分别进行了亮度、对比度和伽马值的调整,并使用 `imshow` 函数显示了调整后的图片。
对于亮度和对比度的调整,使用 `convertTo` 函数,其中第二个参数为输出图像的数据类型,-1 表示与输入图像相同的数据类型。第三个参数为缩放因子,可以调整亮度和对比度,第四个参数为平移因子,只能调整对比度。
对于伽马值的调整,使用了查找表(LUT)方法。首先定义了一个伽马值,然后使用 `pow` 函数计算了伽马值变换的查找表,最后使用 `LUT` 函数进行了变换。
需要注意的是,以上代码只是对单张图片进行了调整,如果需要对多张图片进行批量处理,可以使用循环语句。