opencv —— equalizeHist 直方图均衡化
Posted bjxqmy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv —— equalizeHist 直方图均衡化相关的知识,希望对你有一定的参考价值。
直方图均匀化简介
从这张未经处理的灰度图可以看出,其灰度集中在非常小的一个范围内。这就导致了图片的强弱对比不强烈。
直方图均衡化的目的,就是把原始的直方图变换为在整个灰度范围(0~255)内均匀分布的形式,从而增加像素灰度值的动态范围,达到增强图像整体对比度的效果。
直方图均衡化的列表计算
序号 |
运算 |
步骤和结果 | |||||||
1 |
列出原始图灰度值 f(0 ≤ f ≤ L-1) |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
2 | 列出原始直方图(概率表达) | 0.02 | 0.05 | 0.09 | 0.12 | 0.14 | 0.2 | 0.22 | 0.16 |
3 | 计算原始累计直方图 gf(灰度值 ≤ f 的概率和) | 0.02 | 0.07 | 0.16 | 0.28 | 0.42 | 0.62 | 0.84 | 1.00 |
4 | 取整 g=(int) [(L-1)·gf + 0.5] | 0 | 0 | 1 | 2 | 3 | 4 | 6 | 7 |
5 | 确定对应关系(原灰度值 -> 新灰度值) | 0->0 | 1->0 | 2->1 | 3->2 | 4->3 | 5->4 | 6->6 | 7->7 |
6 | 更新直方图 | 0.07 | 0.09 | 0.12 | 0.14 | 0.2 | 0 | 0.22 | 0.16 |
实现直方图均衡化:equalizeHist 函数
equalize 函数实现的灰度直方图均衡化算法,就是把直方图的每个灰度值进行归一化处理,求每种灰度的累积分布,接着得到一个映射的灰度映射表,然后根据相应的灰度值来修正原图中的每个像素。
void equalize(InputArray src, OutputArray dst);
- src,输入图像,即源图像,填 Mat 类的对象即可,但需要为 8 位单通道的图像。
- dst,输出结果,需要和源图像有一样的尺寸和类型。
代码示例:
#include<opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
Mat src = imread("C:/Users/齐明洋/Desktop/1.jpg");
imshow("src", src);
Mat gray, dst;
cvtColor(src, gray, COLOR_BGR2GRAY);
imshow("gray", gray);
equalizeHist(gray, dst);
imshow("dst", dst);
waitKey(0);
}
效果展示:
以上是关于opencv —— equalizeHist 直方图均衡化的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV-实现直方图均衡化(对比cv::equalizeHist)
数字图像处理:OpenCV-Python中的直方图均衡知识介绍及函数equalizeHist详解