opencv提高彩色图片对比度C++实现
时间: 2023-10-09 08:12:18 浏览: 184
要提高彩色图像的对比度,可以使用OpenCV中的convertScaleAbs函数来进行线性变换。通过调整亮度和对比度参数,你可以增强图像的对比度。
下面是一个使用C++实现的示例代码:
```cpp
#include <opencv2/opencv.hpp>
int main() {
cv::Mat image = cv::imread("image.jpg");
double alpha = 1.5; // 对比度增益
int beta = 0; // 亮度增益
cv::Mat result;
image.convertTo(result, -1, alpha, beta);
cv::imshow("Original Image", image);
cv::imshow("High Contrast Image", result);
cv::waitKey(0);
return 0;
}
```
在上述代码中,我们使用convertTo函数将原始图像进行线性变换。通过调整alpha值来控制对比度的增益,beta值来控制亮度的增益。请确保将"image.jpg"替换为你要处理的图像文件路径。运行该代码后,你将看到对比度增强后的图像显示在窗口中。
相关问题
opencv 对彩色图片进行LSC c++代码
以下是使用OpenCV对彩色图像进行LSC的C++代码示例:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main() {
// 加载彩色图像
Mat src = imread("input.jpg");
if (src.empty()) {
cerr << "Failed to load input image!" << endl;
return -1;
}
// 将彩色图像转换为灰度图像
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 计算灰度图像的直方图
Mat hist;
int histSize = 256;
float range[] = {0, 256};
const float *ranges[] = {range};
calcHist(&gray, 1, 0, Mat(), hist, 1, &histSize, ranges);
// 计算直方图的累积分布函数
Mat cdf;
hist.copyTo(cdf);
for (int i = 1; i < histSize; ++i) {
cdf.at<float>(i) += cdf.at<float>(i - 1);
}
cdf /= gray.total();
// 计算LSC映射表
Mat lut(1, histSize, CV_8U);
float alpha = 255.0 / (gray.total() - cdf.at<float>(0));
for (int i = 0; i < histSize; ++i) {
lut.at<uchar>(i) = saturate_cast<uchar>(alpha * (cdf.at<float>(i) - cdf.at<float>(0)));
}
// 对彩色图像的三个通道分别进行LSC处理
vector<Mat> bgr;
split(src, bgr);
for (int i = 0; i < 3; ++i) {
LUT(bgr[i], lut, bgr[i]);
}
Mat dst;
merge(bgr, dst);
// 显示结果
imshow("Input", src);
imshow("Output", dst);
waitKey(0);
return 0;
}
```
需要注意的是,LSC是一种直方图均衡化方法,会增加图像的对比度和亮度,可能会导致图像失真。在实际应用中,需要根据具体情况选择合适的直方图均衡化方法。
opencv 对彩色图片进行镜头阴影矫正c++代码
以下是OpenCV对彩色图片进行镜头阴影矫正的C++代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
// 读取原始图像
Mat src = imread("input.jpg");
if (src.empty())
{
cout << "Could not open or find the image!\n";
return -1;
}
// 将图像转换为Lab颜色空间
Mat lab;
cvtColor(src, lab, COLOR_BGR2Lab);
// 均值漂移滤波
Mat shift;
pyrMeanShiftFiltering(lab, shift, 20, 45);
// 分离通道
vector<Mat> channels;
split(shift, channels);
// 对a通道应用CLAHE直方图均衡化
Ptr<CLAHE> clahe = createCLAHE(2.0, Size(8, 8));
clahe->apply(channels[1], channels[1]);
// 合并通道
Mat result;
merge(channels, result);
// 将结果转换回BGR颜色空间
Mat dst;
cvtColor(result, dst, COLOR_Lab2BGR);
// 显示结果
imshow("Input", src);
imshow("Output", dst);
waitKey(0);
return 0;
}
```
这段代码的主要步骤如下:
1. 读取原始图像。
2. 将图像转换为Lab颜色空间,这种颜色空间对光照变化不敏感,适合进行镜头阴影矫正。
3. 对图像进行均值漂移滤波,可以去除噪声和细节,同时保留颜色信息。
4. 分离通道,对a通道应用CLAHE直方图均衡化,增强对比度。
5. 合并通道,将结果转换回BGR颜色空间。
6. 显示结果。
这段代码实现了一种简单的镜头阴影矫正方法,通过均值漂移滤波和CLAHE直方图均衡化处理,可以去除阴影和提高对比度,实现更好的图像效果。
阅读全文