在图像处理领域,图像增强是一个非常重要的技术,目的是通过调整图像的某些特征来改善图像的视觉效果,或为后续的图像分析和处理做准备。在 OpenCV 中,C++ 提供了多种图像增强方法,包括直方图均衡化、对比度拉伸、锐化、边缘增强等操作。下面详细介绍 C++ 中使用 OpenCV 进行图像增强的常用方法,并附上代码示例。
1. 直方图均衡化 (Histogram Equalization)
直方图均衡化是一种常用的图像增强技术,主要用于改善图像的对比度,使图像的灰度值分布更加均匀,适合处理光照不均的图像。
代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取灰度图像
Mat image = imread("image.jpg", IMREAD_GRAYSCALE);
if (image.empty()) {
return -1;
}
// 直方图均衡化
Mat equalized_image;
equalizeHist(image, equalized_image);
// 显示原图和均衡化后的图像
imshow("Original Image", image);
imshow("Equalized Image", equalized_image);
waitKey(0);
return 0;
}
主要函数:
equalizeHist()
:用于对图像进行直方图均衡化。只能应用于灰度图像。
2. CLAHE (对比度受限自适应直方图均衡化)
CLAHE(Contrast Limited Adaptive Histogram Equalization)是一种改进的直方图均衡化方法,它将图像分成小块(称为 tiles
),分别对每个块进行直方图均衡化,避免了传统均衡化中可能产生的过度增强现象。
代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取灰度图像
Mat image = imread("image.jpg", IMREAD_GRAYSCALE);
if (image.empty()) {
return -1;
}
// 创建CLAHE对象
Ptr<CLAHE> clahe = createCLAHE();
clahe->setClipLimit(2.0); // 设置对比度限制
Mat clahe_image;
clahe->apply(image, clahe_image);
// 显示原图和CLAHE增强后的图像
imshow("Original Image", image);
imshow("CLAHE Image", clahe_image);
waitKey(0);
return 0;
}
主要函数:
createCLAHE()
:创建一个 CLAHE 对象。setClipLimit()
:设置 CLAHE 的对比度限制。
3. 亮度与对比度调整 (Brightness and Contrast Adjustment)
通过线性变换可以直接调整图像的亮度和对比度。调整亮度通常是在图像上加上一个常数,而调整对比度则是对图像乘以一个系数。
公式为:
new_image=α×image+β
其中,alpha
是对比度因子,beta
是亮度偏移值。
代码实现:
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 读取图像
Mat image = imread("image.jpg");
if (image.empty()) {
return -1;
}
Mat new_image = Mat::zeros(image.size(), image