opencv调整亮度和对比度
时间: 2023-09-13 08:08:26 浏览: 197
OpenCV提供了很多函数来调整图像的亮度和对比度,以下是一个简单的例子:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('test.jpg')
# 调整亮度和对比度
alpha = 1.5 # 调整对比度的参数
beta = 50 # 调整亮度的参数
new_img = np.clip(alpha * img + beta, 0, 255).astype(np.uint8)
# 显示原图和调整后的图
cv2.imshow('Original Image', img)
cv2.imshow('New Image', new_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个例子中,我们使用了以下公式来调整亮度和对比度:
$$
g(x) = \alpha f(x) + \beta
$$
其中,$f(x)$ 表示原始像素值,$g(x)$ 表示调整后的像素值,$\alpha$ 是对比度调整参数,$\beta$ 是亮度调整参数。我们使用 `np.clip` 函数将调整后的像素值限制在 0 到 255 之间,然后使用 `astype` 函数将数据类型转换为 `np.uint8`,最后显示原始图像和调整后的图像。
你可以根据自己的需要调整参数 $\alpha$ 和 $\beta$ 来得到不同的效果。
相关问题
opencv调整亮度 对比度
### 使用 OpenCV 调整图像亮度和对比度
#### 方法概述
调整图像的亮度和对比度是增强图像质量的重要手段之一。通过改变图像中的每个像素值,可以使图像更清晰或更适合特定应用场景。
#### 实现原理
为了实现这一功能,在编程中通常采用线性变换的方式:
\[ g(i,j)=α⋅f(i,j)+β \]
其中 \( f(i,j) \) 表示原始图像在位置 (i, j) 处的颜色强度;\( α \) 控制对比度,而 \( β \) 则用来调节亮度[^4]。
对于上述公式而言,当参数 \( α>1 \),则表示增加对比度;反之,则降低对比度。同样地,正值的 \( β \) 增加整体亮度,负数减少亮度。
为了避免数值超出有效范围(即0到255之间),OpenCV 提供了一个名为 `cv::saturate_cast` 的工具函数来自动处理可能发生的溢出情况[^2]。
#### Python 示例代码
下面是一段基于Python语言并利用OpenCV库完成此任务的具体实例:
```python
import cv2
import numpy as np
def adjust_brightness_contrast(image_path, alpha=1.0, beta=0):
image = cv2.imread(image_path)
adjusted_image = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)
return adjusted_image
if __name__ == "__main__":
img_file = "example.jpg"
# 设置对比度因子(大于1为提高),以及亮度偏移量
contrast_factor = 1.8
brightness_offset = 30
result_img = adjust_brightness_contrast(img_file, contrast_factor, brightness_offset)
cv2.imshow('Original Image', cv2.imread(img_file))
cv2.imshow('Adjusted Image', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段程序定义了一个简单的函数 `adjust_brightness_contrast()` ,它接收图片路径作为输入,并允许指定两个额外参数:一个是控制对比度的比例系数 (`alpha`),另一个是用来增减亮度的固定增量(`beta`) 。最后展示了原图与经过修改后的效果图以便比较[^3]。
c++ opencv实现图像亮度对比度伽马值调整
在C++中,可以使用OpenCV库来实现图像的亮度、对比度和伽马值调整。下面是一个简单的示例代码:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
// 亮度和对比度调整函数
void adjustBrightnessContrast(Mat& image, double alpha, int beta)
{
// 遍历图像的每个像素
for (int y = 0; y < image.rows; y++)
{
for (int x = 0; x < image.cols; x++)
{
for (int c = 0; c < image.channels(); c++)
{
// 对每个通道的像素进行亮度和对比度调整
image.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(alpha * image.at<Vec3b>(y, x)[c] + beta);
}
}
}
}
// 伽马值调整函数
void adjustGamma(Mat& image, double gamma)
{
// 建立查找表
unsigned char lut[256];
for (int i = 0; i < 256; i++)
{
lut[i] = saturate_cast<uchar>(pow((double)i / 255.0, gamma) * 255.0);
}
// 应用查找表
image = image.clone();
LUT(image, Mat(1, 256, CV_8UC1, lut), image);
}
int main()
{
// 读取图像
Mat image = imread("input.jpg");
if (image.empty())
{
std::cerr << "Failed to read image." << std::endl;
return -1;
}
// 调整亮度和对比度
double alpha = 1.5; // 亮度调整参数
int beta = 30; // 对比度调整参数
adjustBrightnessContrast(image, alpha, beta);
// 调整伽马值
double gamma = 1.5; // 伽马值调整参数
adjustGamma(image, gamma);
// 显示结果图像
imshow("Adjusted Image", image);
waitKey(0);
return 0;
}
```
在这个示例代码中,我们首先定义了两个函数:`adjustBrightnessContrast`和`adjustGamma`,分别用于亮度和对比度、伽马值的调整。然后在`main`函数中,我们读取了一张图像,然后分别调用这两个函数进行图像处理。最后,将处理后的图像显示出来。
请确保在编译和运行代码之前,已经安装了OpenCV库,并将示例代码中的`input.jpg`替换为你自己的图像路径。
阅读全文