利用OpenCV的calcHist绘制灰度直方图、H-S直方图、BGR直方图和自定义直方图的源码及说明
来源:互联网 发布:装修公司半包猫腻知乎 编辑:程序博客网 时间:2024/04/30 04:22
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 );
点此查看calcHist函数的官方解释!
const Mat* images:待计算直方图的图像源的指针,注意是指针,因为有可能包含多幅图
int nimage:表示待计算图像源中图像的个数,一般情况下都取值为1,就算你要计算多幅,也可以一个个地算啊!如果是多幅,那么说明 images是一个数组撒!
const int* channels:表示要计算哪些通道的指针,注意是指针,因为通道数可能是多个。灰度图为0,HSV的H-S直方图为0和1,BGR为0,1,2(不过BGR图可以使用split分离三个通道,再分别计算,通常也是这样处理)
InputArray mask:掩码阵列,关于这个参数可以参看我写的博文http://blog.csdn.net/wenhao_ir/article/details/51120508
OutputArray hist:存储计算出的直方图数据
int dims:直方图的维度,单通道为1,H-S直方图为2,一维的就是一条线,二维的就是一个平面(即包含x,y两个维度)
const int* histSize:表示直方图横坐标的区间数的指针,注意也是指针,因为对于二维的直方图而言,有两个维度的变量区间
const float** ranges:表示直方图每一维变量的上下界,注意是指针的指针,因为每一维度的区间都是两个边界值,又有可能是多维,如果不明白我说的话,看H-S直方图源码就清楚了
bool uniform=true:表示直方图是否均匀的标志,什么叫是否均匀?我这里就不翻译译官方的文档的注释了。我就说下自己的理解。要理解这个,首先要知道histSize的含义,histSize就明表示咱们这个直方图的横坐标被划分为多少个区间。如果是均匀的,那么从下界到上界之间就被均匀划分为这么多个区间,如果是非均匀,就需要在ranges中给出各个区间的起点和终点,显然histSize个区间需要histSize+1个点。这里我要说明一下在均匀的情况下如果ranges中写了多个区间程序是怎么操作的?比如自定义直方图程序中的histSize[1]={256}; float hranges[6]={0, 60, 120, 160, 220, 255};具体是这样操作的:把256个区间平分5个大区间中,即每个区间51.2个小区间,然后这些每个大区间再分别被划为51.2个小区间。就是这回事!
bool accumulate=false :这个参数表示如果你之前计算过这个直方图,那么这个直方图再次计算时一开始需不需要清零,显然,如果不清零,那么再次计算时是一种更新。
line函数:
这个函数就是利用两点确定一条直线的原理绘线,原型如下:
CV_EXPORTS_W void line(CV_IN_OUT Mat& img, Point pt1, Point pt2, const Scalar& color,
int thickness=1, int lineType=8, int shift=0);
一看原型就什么都知道了,所以没必要多讲!
rectangle函数:
rectangle的绘制过程可以参见博文:
另外有一点我需要特别强调一下 那就是用calcHist计算出来的255级灰度值总是0,关于这个问题,我专门写了篇博文,详见http://blog.csdn.net/wenhao_ir/article/details/51332416 如果以后你的程序中要用到255级灰度值,那么可以自己写一段程序计算255级的灰度值,这个程序实际上很容易完成,可以参考我写的博文http://blog.csdn.net/wenhao_ir/article/details/51332416
好,接下来上源码,明白了以上函数的使用之后,再来看这个源码就很容易了!所以我就不注释什么了~
源码中用到的图片的下载链接:http://pan.baidu.com/s/1kUEDw5x
首先是灰度直方图的源码
//OpenCV版本2.4.9 //交流QQ2487872782 2016-8-4注:很报歉,此代码目前不能公开发表在博客上,已经删除,希望大家能理解!
其次是H-S直方图的源码
//OpenCV版本2.4.9 //交流QQ2487872782 2016-8-4注:很报歉,此代码目前不能公开发表在博客上,已经删除,希望大家能理解!
再次是BGR直方图
//OpenCV版本2.4.9 //交流QQ2487872782 2016-8-4注:很报歉,此代码目前不能公开发表在博客上,已经删除,希望大家能理解!
最后是自定义直方图
//OpenCV版本2.4.9 //交流QQ2487872782 2016-8-4注:很报歉,此代码目前不能公开发表在博客上,已经删除,希望大家能理解!
运行结果依次如下图所示:
-------------------------------------------
欢迎大家加入图像识别技术交流群:271891601,另外,特别欢迎成都从事图像识别工作的朋友交流,我的QQ号2487872782
- 利用OpenCV的calcHist绘制灰度直方图、H-S直方图、BGR直方图和自定义直方图的源码及说明
- 灰度直方图和H-S二维直方图
- opencv 绘制H-S直方图
- opencv绘制灰度直方图
- opencv绘制灰度直方图
- opencv 绘制灰度直方图
- opencv——灰度直方图的绘制
- 利用opencv绘制 灰度直方图 RGB直方图 HSV直方图 直方图均衡化
- Opencv绘制灰度/彩色图像的直方图及直方图的均衡化实例及源代码
- OpenCV环境下计算并绘制灰度直方图的源码!
- OpenCV-统计图像的直方图,绘制直方图
- OpenCV:绘制图像的BGR三通道直方图
- 利用OpenCV计算并绘制灰度直方图
- H-S直方图,opencv
- OpenCV【4】---calcHist 计算图像的直方图
- opencv3 绘制二维直方图-H-S直方图
- opencv 直方图calcHist
- opencv 图像直方图 calcHist
- AngularJS中的$emit,$broadCast,$on
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)
- 设计模式(Design Pattern)系列之.NET专题
- UISearchBar控件
- 【可视化】数据图表可视化
- 利用OpenCV的calcHist绘制灰度直方图、H-S直方图、BGR直方图和自定义直方图的源码及说明
- EventBus详解
- 【腾讯Bugly干货】深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
- DeepLearningNotes: Network In Network
- 一步一步教你写股票走势图——分时图二(自定义xy轴)
- 安卓View开发心得(四)
- UITextField
- ThreadLocal内部实现及应用场景
- 【Linux】Linux系统下的PCB结构(task_struct)