【OpenCV】灰度直方图C++实现

什么是灰度直方图:
在数字图像处理中,灰度直方图是一种计算代价非常小但很有用的工具,它概括了一幅图像的灰度级信息。灰度直方图是图像灰度级的函数,用来描述每个灰度级在图像矩阵中的像素个数或者占有率。

c++代码如下:

Mat calcGrayHist(const Mat & image)
{
	Mat histogram = Mat::zeros(Size(256,1),CV_32SC1);    	 //256对应的是0~255共计256个像素值
													  		 //注意,Size对应的是x和y,也就是第一个元数是矩阵的列数
	int rows = image.rows;   	 //输入图像的行数
	int cols = image.cols;		 //输入图像的列数

	for(int r =0;r<rows;r++)
	{
		for(int c = 0;c<cols;c++)
		{
			int index = int(image.at<uchar>(r,c);	//获取每个点的像素值
			histogram.at<int>(0,index) +=1;			//获取了一个像素值,在相应的位置上加1
		}
	}
	return histogram;
}

图像对比度是通过灰度级范围来度量的,而灰度级范围可通过观察灰度直方图得到,灰度级范围越大代表对比度越高;反之,对比度越低,低对比度的图像在视觉上给人的感觉是看起来不够清晰。

猜你喜欢

转载自blog.csdn.net/weixin_42104289/article/details/86543982