目录
1. 图像对比度
图像对比度是指图像中亮部和暗部之间的差异程度。对比度越高,亮区更亮,暗区更暗;对比度低时,亮区和暗区的差异不明显,图像显得平淡。
2. 对比度调整的原理
图像对比度可以通过线性变换实现,公式如下:
\[I_{out} = \alpha \cdot I_{in} + \beta \]- \(I_{in}\) 是输入图像的像素值。
- \(I_{out}\) 是输出图像的像素值。
- \(\alpha\) 是对比度调整因子,通常大于1会增强对比度,介于0到1之间会降低对比度。
- \(\beta\) 是亮度调整因子,它的作用是整体调整图像亮度。
3. 示例
对RGB图像进行对比度调整。
#include <opencv2/opencv.hpp>
#include <iostream>
void adjustContrast(const cv::Mat& inputImage, cv::Mat& outputImage, double alpha, double beta) {
// 创建输出图像,初始化为和输入图像相同大小和类型
outputImage = cv::Mat::zeros(inputImage.size(), inputImage.type());
// 遍历每个像素点,应用对比度和亮度调整
for (int y = 0; y < inputImage.rows; y++) {
for (int x = 0; x < inputImage.cols; x++) {
for (int c = 0; c < inputImage.channels(); c++) {
// 应用公式 I_out = alpha * I_in + beta
outputImage.at<cv::Vec3b>(y, x)[c] = cv::saturate_cast<uchar>(
alpha * inputImage.at<cv::Vec3b>(y, x)[c] + beta
);
}
}
}
}
int main() {
// 读取图像
cv::Mat image = cv::imread("input_image.jpg");
if (image.empty()) {
std::cerr << "无法读取图像!" << std::endl;
return -1;
}
// 调整参数:alpha 调整对比度,beta 调整亮度
double alpha = 1.5; // 对比度因子
double beta = 20; // 亮度偏移量
cv::Mat outputImage;
adjustContrast(image, outputImage, alpha, beta);
// 显示原始图像和调整后的图像
cv::imshow("Original Image", image);
cv::imshow("Contrast Adjusted Image", outputImage);
// 保存输出图像
cv::imwrite("output_image.jpg", outputImage);
// 等待用户按键
cv::waitKey(0);
return 0;
}
代码说明:
-
\[I_{out} = \alpha \cdot I_{in} + \beta \]adjustContrast
函数: 该函数用于调整图像的对比度和亮度。遍历每个像素点,并对每个通道(RGB)应用公式:其中,
cv::saturate_cast<uchar>
确保像素值在0到255之间。 -
参数
alpha
和beta
:alpha
(对比度因子):大于1会增强对比度,0到1之间会降低对比度。beta
(亮度偏移量):正值增加整体亮度,负值降低整体亮度。
-
cv::Mat::zeros()
: 用于创建与输入图像相同尺寸和类型的空白图像。
4. 调整对比度的效果
- 如果你设置
alpha = 1.5
,图像对比度会变得更高,亮的部分变得更亮,暗的部分变得更暗。 - 如果你设置
alpha = 0.5
,图像的对比度会降低,亮暗之间的差异会减少。 beta
的调整则控制整体亮度的升高或降低。
标签:inputImage,OpenCV,beta,图像,对比度,alpha,cv From: https://www.cnblogs.com/keye/p/18426015