使用C++版opencv,如何给图像设置亮度和对比度
时间: 2023-12-26 14:06:23 浏览: 148
要给图像设置亮度和对比度,可以使用以下代码:
```c++
cv::Mat image = cv::imread("image.jpg");
double alpha = 1.5; // 对比度增益
int beta = 50; // 亮度增益
cv::Mat new_image = cv::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<cv::Vec3b>(y, x)[c] = cv::saturate_cast<uchar>(alpha * image.at<cv::Vec3b>(y, x)[c] + beta);
}
}
}
```
在上面的代码中,我们首先读取了一张图像,然后设置了对比度增益和亮度增益。接着我们创建了一个新的图像 `new_image`,并且使用 `saturate_cast` 函数将像素值转换为 8 位无符号整数。最后,我们将亮度和对比度的调整应用到每个像素上。
注意,上述代码只适用于彩色图像,如果要处理灰度图像,需要将代码中的 `cv::Vec3b` 换成 `uchar`。
相关问题
使用C++版opencv,如何给图像设置统一的亮度和对比度
要给图像设置统一的亮度和对比度,可以使用以下代码:
```c++
cv::Mat image = cv::imread("image.jpg");
double alpha = 1.5; // 对比度增益
int beta = 50; // 亮度增益
cv::Mat new_image = cv::Mat::zeros(image.size(), image.type());
// 应用亮度和对比度调整
image.convertTo(new_image, -1, alpha, beta);
```
在上面的代码中,我们首先读取了一张图像,然后设置了对比度增益和亮度增益。接着我们创建了一个新的图像 `new_image`,并且使用 `convertTo` 函数将像素值转换为指定的数据类型,同时应用亮度和对比度的调整。
注意,上述代码中的 `convertTo` 函数第一个参数指定了输出图像的数据类型,如果需要输出灰度图像,可以将其设置为 `CV_8UC1`。第二个参数指定了输出图像的通道数,如果输入图像是灰度图像,可以将其设置为 `-1`。
opencv图像提高图像亮度与对比度
### 使用OpenCV调整图像亮度和对比度
为了使用OpenCV来增强图像的亮度和对比度,可以采用线性变换方法。这种方法通过改变像素值实现视觉效果上的变化。
对于亮度调整,可以通过向每个像素值增加一个常数值完成:
```cpp
cv::Mat adjustBrightness(const cv::Mat& src, int brightness) {
cv::Mat dst;
src.convertTo(dst, -1, 1, brightness);
return dst;
}
```
此函数接收源图片`src`以及要添加到每个像素的亮度增量`brightness`作为参数[^1]。
对于对比度调整,则需乘以一个比例因子:
```cpp
cv::Mat adjustContrast(const cv::Mat& src, double contrast) {
cv::Mat dst;
src.convertTo(dst, -1, contrast, 0);
return dst;
}
```
这里`contrast`是一个浮点数,表示放大或缩小原始灰阶差异的程度[^2]。
当同时处理亮度和对比度时,通常先应用对比度更改再做亮度修正会得到更好的结果。完整的操作如下所示:
```cpp
void adjustImage(cv::Mat& img, double alpha, int beta) {
/// [alpha 值用于控制对比度 (1.0-3.0)]
/// [beta 值用来调节亮度 (-100 to 100 between)]
for(int y = 0; y < img.rows; y++) {
for(int x = 0; x < img.cols; x++) {
for(int c = 0; c < 3; c++) {
img.at<cv::Vec3b>(y,x)[c] =
cv::saturate_cast<uchar>((img.at<cv::Vec3b>(y,x)[c]*alpha) + beta);
}
}
}
}
```
上述代码片段展示了如何遍历整个图像并逐个修改RGB通道中的每一个分量,从而达到调整目的[^3]。
值得注意的是,在实际编程实践中应当考虑边界条件,比如防止溢出等问题;另外也可以利用OpenCV库内置的功能如`convertScaleAbs()`来进行更高效的批量运算。
阅读全文
相关推荐
















