概念
直方图是图像中像素强度分布的图形表达方式,它统计了每一个强度值所具有的像素个数,而直方图均衡化就是拉伸像素的强度范围。
用Photoshop来演示的话如下图:
●源图像(灰度图)
●源图像直方图
●直方图均衡化后图像(灰度图)
●直方图均衡化后直方图
函数讲解
●函数原型
○c++
void equalizeHist( InputArray src, OutputArray dst )
○Android
void equalizeHist(Mat src, Mat dst)
●参数解释
○src:源图像,灰度图
○dst :输出图像,size与输入图像一致
函数使用
●c++中
#include<opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/Administrator/Desktop/meinv2.jpg");//引入源图像
if (src.empty()) {
return -1;
}
imshow("src",src);//展示源图像
cvtColor(src, src, CV_BGR2GRAY);//源图像灰度化
Mat dst;
equalizeHist(src, dst);//图像直方图均衡化
imshow("dst",dst);//展示直方图均衡化后的图像
waitKey(0);
return 0;
}
●Android中
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_relief);
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);//将Bitmap对象转换为Mat对象
Imgproc.cvtColor(src,src,Imgproc.COLOR_RGBA2GRAY);//将源图像转化为灰度图像
Imgproc.equalizeHist(src,dst);//图像直方图均衡化
Utils.matToBitmap(dst,bitmap);//将Mat对象转换为Bitmap对象