- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
对灰度图像进行直方图均衡化。
该函数使用以下算法对输入图像的直方图进行均衡化:
- 计算输入图像 src 的直方图 H。
- 将直方图归一化,使得直方图各 bin 之和为 255。
- 计算直方图的积分:
H i ′ = ∑ 0 ≤ j < i H ( j ) H'_i = \sum _{0 \le j < i} H(j) Hi′=0≤j<i∑H(j) - 使用 H ′ H' H′作为查找表对图像进行变换: dst ( x , y ) = H ′ ( src ( x , y ) ) \texttt{dst}(x,y) = H'(\texttt{src}(x,y)) dst(x,y)=H′(src(x,y))
该算法对图像的亮度进行了归一化并增加了图像的对比度。
函数原型
void cv::equalizeHist
(
InputArray src,
OutputArray dst
)
参数
- 参数src 8 位单通道源图像。
- 参数dst 与 src 大小和类型相同的目標图像。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>
int main( int argc, char** argv )
{
// 读取输入图像
cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/qiu.jpg", cv::IMREAD_GRAYSCALE );
if ( src.empty() )
{
std::cerr << "Error: Image cannot be loaded!" << std::endl;
return -1;
}
// 创建目标图像
cv::Mat dst;
// 进行直方图均衡化
cv::equalizeHist( src, dst );
// 显示原始图像
cv::imshow( "Original Image", src );
// 显示均衡化后的图像
cv::imshow( "Equalized Image", dst );
// 等待按键,关闭窗口
cv::waitKey( 0 );
return 0;
}