OpenCV中用CvHistogram表示多维直方图(
http://www.opencv.org.cn/index.php/Cv%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86#CvHistogram
):
typedef struct CvHistogram
int type;
CvArr* bins; //存放每个灰度级数目的数组指针
float thresh[CV_MAX_DIM][2]; //均匀直方图
float** thresh2; //非均匀直方图
CvMatND mat; //直方图数组的内部数据结构
CvHistogram;
这个结构看起来简单(比IplImage*元素少多了。。。)其实并不太好理解。
第一个成员type用来指定第二个成员bins的类型。OpenCv中常见到CvArr*的接口,可以用以指定诸如CvMat、CvMatND、IplImage的类型,其实CvArr*的是一个指向void的指针。在函数内部有时需要得到确切的指向类型,这就需要type来指定。
直方图规定化与直方图均衡化相似,都是对图像的直方图分布形式进行改变,只是直方图均衡化后的图像是均匀分布的,而直方图规定化后的直方图可以任意指定,即在执行直方图规定化操作时,首先要知道变换后的
灰度直方图
分布形式,进而确定变换函数,直方图规定化有目的地增强某个灰度区间。如果一个图像的直方图都集中在一个区域那么整体图像的对比度比较小,不便于图像中纹理识别。如果通过映射关系,将图像中灰度值的范围扩大,增加原来两个灰度值之间的差值,就可以提高图像的对比度,进而将图像中的纹理凸显出来,这个过程称为图像直方图均衡化。
通过直方图你可以对整幅图像的灰度分布有一个整体的了解。
直方图的 x 轴是灰度值(0 到 255),y 轴是图片中具有同一个灰度值的点的数目。
直方图其实就是对图像的另一种解释。一下图为例,通过直方图我们可以对图像的对比度,亮
图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是灰度图像的阈值分割、基于颜色的图像检索以及图像分类。
1.一维的直方图
函数部分如下所示:
void QuickDemo::histogram_demo(Mat &
image
) {
/*图像直方图是图像像素值的统计学特征,计算代价较小,具有图像的平移、旋转、缩放不变性的优点。
Bins是指直方图的大小范围
//三通道分离
std...
掩码,大小和
image
一致,其中把需要处理的部分部分指定为 1,不需要处理的部分指定为0,一般设置为 None,表示处理整幅图像;对图片的对比度进行调整,输入为灰度图像,对亮度进行归一化处理,提高灰度图的对比度;输入图像的数目,第一幅图像的通道标号从 0 到
image
[0].channels( ) - 1。(具体参数解释见
Opencv
API)hist 的大小,即直方图横坐标的范围。hist 的范围,即直方图纵坐标的范围。需要统计的通道 dim。
直方图(Histogram)是对数据进行统计的一种方法,也是直观表现数据分布特征的一种表现方式。在
数字图像
分析过程中,通过图像的灰度、梯度、方向和颜色等特征属性的分布直方图我们能更客观分析图像的某些特征,对直方图的分布进行处理(如重排、区间映射等),往往能达到我们想要的视觉效果,比如:对
灰度直方图
进行均衡化处理,扩散灰度区间,可以有效调整图像对比度,以达到图像增强的目的,所以在传统低光照...
图像直方图是图像处理中非常重要的像素统计结果。图像直方图不再表征任何的图像纹理信息,而是对图像像素的统计。
在
OpenCV
4中,提供了图像直方图的统计函数calcHist(),该函数能够统计出图像中每个灰度值的个数,但是对于直方图的绘制需要我们自己进行。calcHist()函数原型如下所示:
void cv::calcHist(const Mat *
image
s,
int n
image
s,
con...