1.简介
对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见。此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量。
- 图像直方图均衡化可以用于
图像增强
.
- 直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.
- 说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中间图所示的直方图. 均衡化的图像见下面右图.
2.opencv API
直方图均衡化一般先将图像转为灰度图,然后对其进行均衡化
OpenCV中直方图均衡化的API很简单
- equalizeHist(src, dst)
3.示例
将彩色图像进行直方图均衡化已达到图像增强
步骤:
1.彩色图像通道进行分离(RGB)
2.每一个单通道进行直方图均衡化
3.将均衡化后的图像进行合并得到彩色图像
#include <opencv2/opencv.hpp> int main(int argc, char* argv[]) { Mat src = imread("dog.jpg"); if (src.empty()) { printf("could not load image... "); return -1; } imshow("src", src); vector<Mat> bgr; split(src, bgr); Mat dst; equalizeHist(bgr[0], bgr[0]); equalizeHist(bgr[1], bgr[1]); equalizeHist(bgr[2], bgr[2]); merge(bgr, dst); imshow("eq", dst); waitKey(0); return 0; }
参考:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/histogram_equalization/histogram_equalization.html