OpenCV环境下计算并绘制灰度直方图的源码!
2017-09-20 17:06
417 查看
本文转自 http://opencv66.net/thread-15-1-1.html
图像的直方图是图像进行运算时的一个重要的数据特征,许多算法都需要用到图像的直方图数据,OpenCV提供了函数calcHist用来计算图像的直方图数据。这个函数的参数较多,下面介绍这个函数。
calcHist的原型如下:
void calcHist(const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims,const int* histSize,const float** ranges, bool uniform = true, bool accumulate = false);
参数意义如下:
images:源图像数组,数组内的图片应该有相同的深度和大小,图像深度只能是CV_8U或CV_32F,通道数可以不同,注意这个参数是指针。
nimages:要计算图像的个数。
channel:计算哪些通道的直方图。通道编号方法:第一张图的通道编号为0至images[0].channels()-1,第二张图的通道编号为images[0].channels()至images[0].channels() + images[1].channels()-1,以此类推,注意这个参数是指针。
mask:掩码阵列。掩码中的非0元素对应的图像元素将会被计算,0元素则被屏蔽不参与计算。掩码阵列可以为空。
hist:直方图计算结果存储阵列。
dims:直方图的维度,比如灰度图的直方图为1维,H-S直方图为2维,以此类推,最大不超过CV_MAX_DIMS,目前CV_MAX_DIMS=32。
histSize:各个维度的大小。
ranges:存储每个维度的统计范围。
uniform:直方图是否均匀化的标志,意义暂时不清楚,等以后搞清楚了再来补充说明。
accumulate:记忆标志。表示这个函数空间被再次调用前是否清零,如果不清零,则可以使得用户存储多张图的直方图数据,或者对之前的计算过的直方图进行更新。
OpenCV下计算并绘制直方图的代码如下:
源代码请访问原帖查看,链接是 http://opencv66.net/thread-15-1-1.html
源代码请访问原帖查看,链接是 http://opencv66.net/thread-15-1-1.html
源代码请访问原帖查看,链接是 http://opencv66.net/thread-15-1-1.html
代码说明:
代码中用到了line函数来绘制直方图,这里给出它的原型,大家看下原型再结合原型自然就明白了怎么用了。
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,int thickness = 1, int lineType = LINE_8, int shift = 0);
另外,大家要注意,在opencv中,坐标原点在左上角,也就是说向下为y轴正方向,所以代码中为了大家的阅读习惯还对图像进行了一次翻转处理。翻转部分代码的原理请大家参看帖子http://opencv66.net/thread-3-1-1.html
代码运行结果截图如下:
本文转自 http://opencv66.net/thread-15-1-1.html
图像的直方图是图像进行运算时的一个重要的数据特征,许多算法都需要用到图像的直方图数据,OpenCV提供了函数calcHist用来计算图像的直方图数据。这个函数的参数较多,下面介绍这个函数。
calcHist的原型如下:
void calcHist(const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims,const int* histSize,const float** ranges, bool uniform = true, bool accumulate = false);
参数意义如下:
images:源图像数组,数组内的图片应该有相同的深度和大小,图像深度只能是CV_8U或CV_32F,通道数可以不同,注意这个参数是指针。
nimages:要计算图像的个数。
channel:计算哪些通道的直方图。通道编号方法:第一张图的通道编号为0至images[0].channels()-1,第二张图的通道编号为images[0].channels()至images[0].channels() + images[1].channels()-1,以此类推,注意这个参数是指针。
mask:掩码阵列。掩码中的非0元素对应的图像元素将会被计算,0元素则被屏蔽不参与计算。掩码阵列可以为空。
hist:直方图计算结果存储阵列。
dims:直方图的维度,比如灰度图的直方图为1维,H-S直方图为2维,以此类推,最大不超过CV_MAX_DIMS,目前CV_MAX_DIMS=32。
histSize:各个维度的大小。
ranges:存储每个维度的统计范围。
uniform:直方图是否均匀化的标志,意义暂时不清楚,等以后搞清楚了再来补充说明。
accumulate:记忆标志。表示这个函数空间被再次调用前是否清零,如果不清零,则可以使得用户存储多张图的直方图数据,或者对之前的计算过的直方图进行更新。
OpenCV下计算并绘制直方图的代码如下:
源代码请访问原帖查看,链接是 http://opencv66.net/thread-15-1-1.html
源代码请访问原帖查看,链接是 http://opencv66.net/thread-15-1-1.html
源代码请访问原帖查看,链接是 http://opencv66.net/thread-15-1-1.html
代码说明:
代码中用到了line函数来绘制直方图,这里给出它的原型,大家看下原型再结合原型自然就明白了怎么用了。
void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,int thickness = 1, int lineType = LINE_8, int shift = 0);
另外,大家要注意,在opencv中,坐标原点在左上角,也就是说向下为y轴正方向,所以代码中为了大家的阅读习惯还对图像进行了一次翻转处理。翻转部分代码的原理请大家参看帖子http://opencv66.net/thread-3-1-1.html
代码运行结果截图如下:
本文转自 http://opencv66.net/thread-15-1-1.html
相关文章推荐
- OpenCV环境下计算并绘制HSV空间的H-S的二维联合直方图
- 利用OpenCV的calcHist绘制灰度直方图、H-S直方图的源码及说明
- 在OpenCV环境下写的灰度图像二维傅里叶换,幅值计算,频谱平移和将数值归一化到0到255区间的四个函数
- opencv绘制灰度直方图
- OpenCV2.3的cvCalcHist函数有问题?255级值总为0,索性自己写一个直方图计算函数,附源码!
- python 计算并绘制灰度直方图
- OpenCV下设置灰度直方图的阈值来对图像进行查找(查表)变换的源码
- 【OpenCV学习笔记】二十二、直方图计算及绘制(二)
- opencv学习之(五)-直方图计算和绘制图像直方图
- Python OpenCV学习笔记之:灰度图像的直方图计算
- opencv之直方图计算及绘制
- opencv学习之(五)-直方图计算和绘制图像直方图
- opencv(18)---直方图计算以及绘制
- OpenCV 直方图计算函数 calcHist源码深度剖析
- 【OpenCV学习笔记】二十一、直方图计算及绘制(一)
- opencv实现灰度图像的直方图点计算以及灰度直方图显示
- Opencv绘制灰度/彩色图像的直方图及直方图的均衡化实例及源代码
- OpenCV2+入门系列(四):计算图像的直方图,平均灰度,灰度方差
- python opencv入门 直方图计算、绘制、分析(22)
- 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码!