1. 直方图均衡化
直方图均衡化是一种增强图像对比度的方法,可以通过均衡化图像的灰度级分布来改善图像中阴影部分的亮度。
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取图像
Mat image = imread("input_image.jpg", IMREAD_COLOR);
if (image.empty()) {
std::cerr << "Error loading image!" << std::endl;
return -1;
}
// 将图像转换为灰度图
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 应用直方图均衡化
Mat equalized;
equalizeHist(gray, equalized);
// 显示原始图像和均衡化后的图像
imshow("Original Image", gray);
imshow("Equalized Image", equalized);
waitKey(0);
return 0;
}
2. 自适应直方图均衡化
自适应直方图均衡化可以更好地处理局部区域的对比度问题,因此特别适合处理阴影部分。
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取图像
Mat image = imread("input_image.jpg", IMREAD_COLOR);
if (image.empty()) {
std::cerr << "Error loading image!" << std::endl;
return -1;
}
// 将图像转换为灰度图
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 应用自适应直方图均衡化
Mat equalized;
Ptr<CLAHE> clahe = createCLAHE();
clahe->setClipLimit(4); // 设置限制参数
clahe->apply(gray, equalized);
// 显示原始图像和均衡化后的图像
imshow("Original Image", gray);
imshow("CLAHE Image", equalized);
waitKey(0);
return 0;
}
3. 使用滤波器
有时可以通过使用滤波器来减少阴影的影响,例如使用高斯滤波器平滑图像,或者使用形态学操作来改善图像的局部对比度。
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取图像
Mat image = imread("input_image.jpg", IMREAD_COLOR);
if (image.empty()) {
std::cerr << "Error loading image!" << std::endl;
return -1;
}
// 将图像转换为灰度图
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 使用高斯滤波器平滑图像
Mat blurred;
GaussianBlur(gray, blurred, Size(5, 5), 0);
// 显示原始图像和平滑后的图像
imshow("Original Image", gray);
imshow("Blurred Image", blurred);
waitKey(0);
return 0;
}