一、简述直方图均衡化
直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法,可以用于图像增强、对输入图像进行直方图均衡化处理,提升后续对象检测的准确率在OpenCV人脸检测的代码演示中已经很常见。此外对医学影像图像与卫星遥感图像也经常通过直方图均衡化来提升图像质量。
二、函数原型
equalizeHist函数
c++原型
?参数:
- 输入图像
- 输出图像
注:此函数只支持单通道图像(灰度图像)的均衡化
三、实现效果
下面三张分别对应原图、灰度图像、灰度图像均衡化
四、代码
void test1::hist_equalize(Mat &image)
{
Mat gray_img;
cvtColor(image,gray_img,COLOR_BGR2GRAY);
namedWindow("gray_img", WINDOW_FREERATIO);
imshow("gray_img", gray_img);//灰度图像
Mat dst;
equalizeHist(gray_img,dst);
namedWindow("hist_equalize", WINDOW_FREERATIO);
imshow("hist_equalize", dst);
}
抛出两个问题:
1、 这里直方图均衡化只支持灰度图像,怎么让它支持彩色图像?
因为直方图均衡化本质上是调整对比度(即亮度),亮度的值在HSV空间里面就是对应V通道,可以先把图像转到HSV空间之后,分离通道再对V通道单独均衡化,再merge回HSV图像里面去,最后再转换到RGB色彩空间里面,这样就可以完成彩色图像的均衡化,当然,也可以转成YCrCb色彩空间进行处理,效果一样,如下图所示
2、opencv中还有一个局部均衡化的函数,可以怎么用?
?
?
|